LoginSignup
4
1

More than 1 year has passed since last update.

refile heroku S3へ画像をアップロード

Last updated at Posted at 2020-10-03

前提条件

・ruby 2.6.6
・rails 5.2.4.1
・refileを導入済
・deviseを使用

概要

 heroku + S3 + refile における組み合わせでS3へ画像アップロードする 方法を忘れないように書いていきます。  実装にかなりてこずったので、そういった人の助けになれば幸いです。

refile-s3の導入

 refileにはAWSのS3と連携してくれる'refile-s3'というgemが存在します。 まずこのgemを導入して、bundle installをします。  また後ほど、環境変数を利用するので'detenv-rails'というgemも入れておきます。
Gemfile
gem "refile-s3"
gem "dotenv-rails"
ターミナル
$ bundle install

AWSのアカウント及びバケットの作成

 AWSのS3を扱うためには、AWSの設定をしておかなければならないので [Carrierwaveとfog-awsを用いて、画像をAWS S3へアップロードする方法](https://qiita.com/matsubishi5/items/c2abdd7375a4c683392a) を参考にAWSの設定と実装の「キーを環境変数化」までを行ってください。

 また、作業工程途中にアクセスキーとシークレットアクセスキーを取得すると思いますが、
他人に見られないような場所に控えておいてください。環境変数の設定で利用します。

#refile.rbを作成する
 refileとAWSの関係を記述するために
 config/initializers の中に refile.rb を作成してください。その中に

config/initializers/refile.rb
require "refile/s3"

aws = {
  access_key_id: ENV["AWS_ACCESS_KEY_ID"],
  secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
  region: "リージョン名", 
  bucket: "バケット名",
}
Refile.cache = Refile::S3.new(prefix: "cache", **aws)
Refile.store = Refile::S3.new(prefix: "store", **aws)

を記述してください。
リージョン名に関しては、リージョンを東京にした場合は ap-northeast-1 に設定してください。
 また、AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYは、AWSの設定時に
控えていただいた値を入れるのですが、セキュリティー上そのまま値を入れるのはまずいので、
別のファイルに環境設定として定義していきます。

#環境変数の設定
 環境変数とは、ざっくり言うとコンピュータが動いているときに使えるパスワードです。
詳しくはぐぐったりしてみてください。
 最初にgemのdotenv-railsを導入したと思うのですが、これは**.env**というファイルの中を
反映してくれます。ここに環境変数を書いていきます。
 .envはターミナルでも作れますが、手動でも作れます。どちらでもいいのでホームディレクトリ直下(gemfile等がある場所)に作成してください。
参考までにターミナルでは以下のようにすれば良いです。

ターミナル
$ touch .env

.envを作成したら、中身を書いていきます。

.env
AWS_ACCESS_KEY_ID = アクセスキー
AWS_SECRET_ACCESS_KEY = シークレットアクセスキー

 セキュリティー上、私のキーは書き込めませんが、ここに控えていたアクセスキーと
シークレットアクセスキーの値を入れてください。
 また、githubにコードをアップロードするときには、このファイルを見られたらまずいので
.gitignoreに**.env**を記述しておきます。

.gitignore
/.env

#herokuに設定
 最後にherokuにS3を使うための設定をしていきます。
S3を利用したいアプリを開いて、Settingを開き、Config Varsにある Reveal Config Vars を押してもらえると、KEYVALUEを入れる欄が出てくると思います。
そこに、環境変数をして設定していた値を入れていきます。
KEY には AWS_ACCESS_KEY_ID、VALUEにはアクセスキー
KEY には AWS_SECRET_ACCESS_KEY、VALUEにはシークレットアクセスキー
それぞれ入れてください。

以上で、設定は終了です。

最後にherokuにデプロイして確認してみましょう。
#herokuにデプロイ

$ git add .
$ git commit -m "commit S3"
$ git push heroku master
$ heroku run rails db:migrate
$ heroku open

一定時間で消えていた画像がずっと残ると思います!
実際にAWSのS3からバケット名をクリックしてもらうと
storeというフォルダがあり、その中に画像が入っていることが確認できると思います。

#最後に
以上でheroku + S3 + refile の組み合わせでS3へ画像アップロードすることができました。
一人でも多くの方の参考になれば幸いです。

参考記事

https://qiita.com/matsubishi5/items/c2abdd7375a4c683392a
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1