0
1

More than 3 years have passed since last update.

画像アップロードにS3を使用メモ

Last updated at Posted at 2020-05-29

herokuでデプロイした際にS3を画像アップローダー先として指定する場合メモ

Rails5.2.3
carrierwave (2.1.0)

carrierwaveで画像をアップロードできる様になっている
またS3という前提で進めます。

外部のストレージを選択しアップロードするのを補助してくれる
fog-awsというgemを追加してbundle installする。

Gemfile
gem 'fog-aws'

アップロードにfogを使用するための設定を行う。
storage :fileをコメントアウトし
storage :fogのコメントアウトを外す。

app/uploaders/image_uploader.rb
# storage :file
  storage :fog

fogのアップロード先の設定をする
/config/initializers直下に、carrierwave.rbというファイルを作成し、
下記のコードをそのままコピペする。

/config/initializers/carrierwave.rb
require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'

CarrierWave.configure do |config|
  config.storage = :fog
  config.fog_provider = 'fog/aws'
  config.fog_credentials = {
    provider: 'AWS',
    aws_access_key_id: Rails.application.credentials.aws[:access_key_id],
    aws_secret_access_key: Rails.application.credentials.aws[:secret_access_key],
    region: 'ap-northeast-1' #アジアパシフィック(東京)を表している
  }

  config.fog_directory  = 'ここにバケット名を入れる'
  config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/ここにバケット名を入れる'
end

credentials.yml.encの内容は暗号化されてるため、エディタなどで直接ファイルを開いて編集することはできません。

そこでviを利用して環境変数:EDITORにviを指定してrails credentials:editコマンドを実行します。

ターミナル
$ EDITOR="vi" bin/rails credentials:edit

上記のコマンドで出てきたcredentials.yml.encの内容に対して、
上3行のコメントアウトを外しインデントを整え、
access_key_idと、
secret_access_keyをそれぞれ入力します。
そしてescでインザートモードを終えて:wqで保存します。

credentials.yml.enc
aws:
  access_key_id: 123
  secret_access_key: 345

# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: 8be8e637d755f79c799048bed8be0c...

本番環境ではmaster keyの指定漏れを防ぐためにconfig/environments/production.rbでconfig.require_master_key = trueを有効化することが推奨されてるようですのでコメントアウトを外す。

config/environments/production.rb
config.require_master_key = true

credentials.yml.enc を使っている場合は、以下のコマンドで master.key を heroku の環境変数としてセット

ターミナル
$ heroku config:set RAILS_MASTER_KEY=`cat config/master.key`

タイムゾーンを変更するため、
config/application.rb に以下を追記

application.rb
config.time_zone = "Tokyo"
config.active_record.default_timezone = :local

以上で設定は完了し、あとはherokuでの作業となります。

ターミナル
$ heroku login
$ git push heroku master
$ heroku open
0
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
0
1