目的
AWSのS3を使用し、画像をアップロードする。
開発環境
macOS: Big Sur
Rubyバージョン: 2.6.5
Railsバージョン: 6.0.0
前提
- S3のバケットが作成されている。
【AWS】S3バケット作成 - 環境変数が設定されている。
【AWS】S3を用いた画像のアップロード - アプリが作成されている。
【Rails】簡単な投稿アプリの作成 - 画像アップロード機能が実装されている。
【Rails】ユーザープロフィール画像機能の実装(Carrierwave)
手順
はじめに
今回はAWSのS3を用いた画像アップロードを実装していきます。
Gemのインストール
以降のコードを編集する際はmasterブランチで作業していきます。
それでは早速始めていきます!
S3を使用するために必要なfog-awsというGemをインストールします!
# 省略
gem 'fog-aws'
% bundle install
これでインストールできました!
アップローダーの編集
続いて、画像の保存先をlocalからS3に保存されるように設定を変更します!
storage :fileをstorage :fogに変更することでS3へアップロードすることができます。
class AvatarUploader < 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 :file
storage :fog
# 省略
これで画像の保存先が変更できました。
carrierwave.rbの編集
次に、S3で使用するバケット名やリージョン名、環境変数を記述します。
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_directory = 'バケット名' # バケット名
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], # 環境変数
aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], # 環境変数
region: 'ap-northeast-1', # リージョン
path_style: true
}
end
「バケット名」の箇所には、自分のバケット名を入力します!
環境変数の設定
環境変数はこちらを参考に設定します。【AWS】S3を用いた画像のアップロード
設定後、正しくできているかを確認するために、下記のコマンドを入力してください。
% heroku config
確認できたら、コミットしてHerokuに反映させます。
% git push heroku master
その後、本番環境で挙動確認し問題がなければ完了です。
最後に
以上で、S3を用いた画像アップロード機能実装は完了です。
では。