Rails 3.2 でAmazon S3を使う方法
今回ハマったのでメモ代わりに
そもそもS3ってなんだろうというところはこちら
#15 ストレージサービスを使ってみよう | Amazon Web Services入門 - プログラミングならドットインストール
手順的には
という形で進んでいきます。
S3インスタンスを作成
#15 ストレージサービスを使ってみよう | Amazon Web Services入門 - プログラミングならドットインストール
こちらをみればだいたいわかります。
gemをインストール
Railsプロジェクト内のGemfileに次のように書き込みます。
gem 'aws-s3', :require => 'aws/s3'
その後
> bundle install
でgemを追加。
railsモジュールの作成
Rails 3.1で画像ストレージにAmazon S3を使う - is Neet
こちらの記事を参考にしました。
railsプロジェクト内の
lib/
配下に
例えばaws_module.rb
というファイルを作成します。
内容は
# -*- coding: utf-8 -*- module Aws require 'aws/s3' include AWS::S3 BUCKET = "[bucket_name]" # moduleをincludeした時にAWSの設定を実行する def self.included(model) AWS::S3::Base.establish_connection!( :access_key_id => 'xxx', :secret_access_key => 'xxx ) AWS::S3::DEFAULT_HOST.replace "s3-ap-northeast-1.amazonaws.com" end end
ここで
RoutingError initialize constants
というエラーが出ることがありますが、それは
require 'aws/s3' include AWS::S3
これがないと発生するのでしっかり付けておきましょう。
このモジュールをコントローラなどで
load 'aws_module.rb' include Aws
というように呼び出します。
S3へのアクセス
ここは一番参考になるのは公式のドキュメントでした。
AWS::S3 - Ruby Library for Amazon Simple Storage Service (S3)
例えばRailsからS3のディレクトリを作成する際には次のように書きます。
S3Object.store("[Directory_name]", nil, '[Bucket_name]')
Directory_nameとBucket_nameを適宜置き換えます。
大抵はこのstoreを駆使しアップロードを行います。
逆に取得はstreamなどを駆使します。
まとめ
色々資料がありましたが、
結局公式ドキュメントが一番参考になりました。