LoginSignup
94
105

More than 5 years have passed since last update.

Rails gem CarrierWave + fog を利用して AWS S3 へ画像をアップロードする

Last updated at Posted at 2015-03-30

Heroku とかの Paas を利用していると発生するファイルのアップロード問題を解決するため、AWS S3 を利用し、ファイルの保存、配信を行う。

ファイルのアップロードについては gem CarrierWave を利用する。

CarrierWave の利用については以下を。

Rails gem CarrierWave を利用してファイルをアップロードする

CarrierWave で、ファイルの保存先を AWS S3 に指定するため fog という gem を利用する。
fog は AWS S3 に限らず、様々なクラウドのサービスを Ruby から利用しやすくするためのライブラリ。

fog : The Ruby cloud services library

GitHub リポジトリ : fog

前提

バージョン
Ruby 2.1.1
Rails 4.2.0
CarrierWave 0.10.0
fog 1.28.0

1. AWS アカウントを作成

AWS のアカウントを持っていない場合は、以下のページをもとにアカウントを作成。

AWS アカウント作成の流れ

2. S3 へのバケット作成と IAM ユーザ作成

S3 でファイルを保管するためのバケットを作成し、同時に S3 へのアクセス用に IAM ユーザを作成。

cloudpack さんのブログがわかりやすいので参考にするとよいかも。

Amazon S3 再入門 – AWS IAMでアクセスしてみよう!(Cyberduck 編)

3. インストール

Gemfile へ fog を追記

Gemfile
gem 'fog'

Gemfile をインストール。
( rails プロジェクトに閉じた状態で gem をインストールしたいため --path オプションを利用 )

$ bundle install --path vendor/bundle

2. CarrierWave uploader クラスの修正

storage を fog へ変更

app/uploaders/image_uploader.rb
storage :fog

3. CarrierWave 設定ファイルの作成

CarrierWave から fog 経由で AWS を利用するための設定。
production 環境用、development 環境用、test 環境用と、環境別にバケットを作成しておくと便利。

config/initialize/carrierwave.rb
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 へはエンドポイントとバケット名を元に指定。


以上。

94
105
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
94
105