#herokuでデプロイした際にS3を画像アップローダー先として指定する場合メモ
Rails5.2.3
carrierwave (2.1.0)
carrierwaveで画像をアップロードできる様になっている
またS3という前提で進めます。
外部のストレージを選択しアップロードするのを補助してくれる
fog-awsというgemを追加してbundle installする。
gem 'fog-aws'
アップロードにfogを使用するための設定を行う。
storage :fileをコメントアウトし
storage :fogのコメントアウトを外す。
# storage :file
storage :fog
fogのアップロード先の設定をする
/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で保存します。
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.require_master_key = true
credentials.yml.enc を使っている場合は、以下のコマンドで master.key を heroku の環境変数としてセット
$ heroku config:set RAILS_MASTER_KEY=`cat config/master.key`
タイムゾーンを変更するため、
config/application.rb に以下を追記
config.time_zone = "Tokyo"
config.active_record.default_timezone = :local
以上で設定は完了し、あとはherokuでの作業となります。
$ heroku login
$ git push heroku master
$ heroku open