【Rails】S3とcarrierwaveの連携メモ
以前書いたS3で簡単なWebページを作るメモから参照し、S3を作成しておく。
以下S3を作成した前提でのRails側でのメモ
IAMユーザー作成
S3を操作するIAMユーザーを追加する。
ユーザー名を適当に、アクセスの種類は「プログラムによるアクセス」
アクセス権限は、既存のポリシーをアタッチ→S3と検索し「AmazonS3FullAccess」を選択
タグなどは設定せず作成。
キーとシークレットキーをメモしておく。
これでS3の操作を全て可能なユーザーが完成。
Rails側
Gemの追記
gem "carrierwave" gem "fog-aws"
libxml2が必要なので使っている環境によってインストールしておく。
僕はDockerだったのでDockerfileのファーストステージにて以下を追記しておいた。
RUN apk --update add --virtual=buildings \ libxml2-dev \ #追記
app/uploaders/image_uploader.rb
class ImageUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagick support: # include CarrierWave::RMagick # include CarrierWave::MiniMagick # Choose what kind of storage to use for this uploader: storage :fog
を書き換え。
画像データがカラムとしてあるモデルのRubyファイルに
mount_uploader :image, ImagesUploader
を追記
config/initializers/carrierwave.rbを新規作成
CarrierWave.configure do |config| config.fog_provider = 'fog/aws' config.fog_directory = 'S3のバケット名' config.fog_credentials = { provider: 'AWS', aws_access_key_id: 'IAMアクセスキー', aws_secret_access_key: 'IAMシークレットキー', region: 'S3のリージョン名', } end
AWSのキーは環境変数やらcredentialとかで隠すこと。
以上で設定完了のはず。