HerokuとS3を連携

S3の初期設定

この記事のバケットの作成のところ(Imagemagikの導入の手前)までの通りすればできました。

【Rails】S3へ『CarrierWave+fog』を使って画像アップロードする方法 | vdeep

Gemfile

こちらを追加し、bundle install

gem 'fog-aws', group: :production
gem 'carrierwave', '~> 1.0'

○_uploader/rbに以下を追記

if Rails.env.production?
    storage :fog
  else
    storage :file
  end

carrier_wave.rb

$ touch config/initializers/carrier_wave.rbでファイル作成
作成したファイルに以下を追記

require 'carrierwave/storage/abstract'
require 'carrierwave/storage/file'
require 'carrierwave/storage/fog'


CarrierWave.configure do |config|
  if Rails.env.production?
    config.storage = :fog
    config.fog_provider = 'fog/aws'
    config.fog_credentials = {
      # Amazon S3用の設定
      :provider              => 'AWS',
      :region                => ENV['S3_REGION'],
      :aws_access_key_id     => ENV['S3_ACCESS_KEY'],
      :aws_secret_access_key => ENV['S3_SECRET_KEY']
    }

    config.fog_directory     =  ENV['S3_BUCKET']
  else
    config.storage :file
    config.enable_processing = false if Rails.env.test?
  end
end

ここの下の画像の人の例を参考にしました。 f:id:shoheimoment:20171215112549p:plain

herokuの環境変数の設定

S3の初期設定で取得できているcredentials を前項のENVの[ ]内の変数を下記コマンドで設定していく。

heroku config:set S3_REGION=
heroku config:set S3_ACCESS_KEY=
heroku config:set S3_SECRET_KEY=
heroku config:set S3_BUCKET=

※credentialsがわからなくなったら、アクセスキーIDとREGIONは次から確認できる。 ルートアカウント認証情報を使用してサインイン→ヘッダーのユーザ名のdropdownからセキュリティ認証情報を選択→左のユーザー→ユーザーを選択→認証情報タブ secret keyはどう確認するかわからないからユーザーを作った時にcredentials.csvをダウンロードしておこう!

デプロイ

これでデプロイしてみるとできている。できなければ、DATABASEのリセットとかを試してみるといいかも。