Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

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


以上。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした