Heroku とかの Paas を利用していると発生するファイルのアップロード問題を解決するため、AWS S3 を利用し、ファイルの保存、配信を行う。
ファイルのアップロードについては gem CarrierWave を利用する。
CarrierWave の利用については以下を。
[Rails gem CarrierWave を利用してファイルをアップロードする]
(http://qiita.com/ryo-ichikawa/items/9ea8a03d78dbaa3106f4)
CarrierWave で、ファイルの保存先を AWS S3 に指定するため fog という gem を利用する。
fog は AWS S3 に限らず、様々なクラウドのサービスを Ruby から利用しやすくするためのライブラリ。
[fog : The Ruby cloud services library]
(http://fog.io/)
[GitHub リポジトリ : fog]
(https://github.com/fog/fog)
前提
バージョン | |
---|---|
Ruby | 2.1.1 |
Rails | 4.2.0 |
CarrierWave | 0.10.0 |
fog | 1.28.0 |
1. AWS アカウントを作成
AWS のアカウントを持っていない場合は、以下のページをもとにアカウントを作成。
2. S3 へのバケット作成と IAM ユーザ作成
S3 でファイルを保管するためのバケットを作成し、同時に S3 へのアクセス用に IAM ユーザを作成。
cloudpack さんのブログがわかりやすいので参考にするとよいかも。
Amazon S3 再入門 – AWS IAMでアクセスしてみよう!(Cyberduck 編)
3. インストール
Gemfile へ fog を追記
gem 'fog'
Gemfile をインストール。
( rails プロジェクトに閉じた状態で gem をインストールしたいため --path オプションを利用 )
$ bundle install --path vendor/bundle
2. CarrierWave uploader クラスの修正
storage を fog へ変更
storage :fog
3. CarrierWave 設定ファイルの作成
CarrierWave から fog 経由で AWS を利用するための設定。
production 環境用、development 環境用、test 環境用と、環境別にバケットを作成しておくと便利。
CarrierWave.configure do |config|
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: 'アクセスキー',
aws_secret_access_key: 'シークレットキー',
region: 'ap-northeast-1'
}
case Rails.env
when 'production'
config.fog_directory = 'dummy'
config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/dummy'
when 'development'
config.fog_directory = 'dev.dummy'
config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/dev.dummy'
when 'test'
config.fog_directory = 'test.dummy'
config.asset_host = 'https://s3-ap-northeast-1.amazonaws.com/test.dummy'
end
end
aws_access_key と aws_secret_access_key へは 2. で作成した IAM ユーザのアクセスキーとシークレットキーを指定。
region は Tokyo リージョンなら ap-northeaset-1 となる。
詳しくは以下を参照。
aws documentation リージョンとエンドポイント
fog_directory へは S3 のバケット名を指定。
asset_host へはエンドポイントとバケット名を元に指定。
以上。