PictureIO

画像はPictureIOが出し入れする

投稿された素材はデータベースではなく、ファイルに保管される。保管先は大抵の場合ローカルマシンになるが、herokuのようにローカルファイルを触れないホストもあるので、ファイルの入出力は柔軟に切り替わるようにPictureIOとして分離した。

差し当たってローカルファイル用のLocalPictureIOとAmazonAWS用のS3PictureIOの、二種類を用意した。

デフォルトでは、開発・テスト環境ではLocalPictureIOを使い、本番ではS3PictureIOを使っている。当然ながら各自の環境に合わせて設定を変える必要がある。設定は下記のファイルを書き換える。

config/environments/development.rb 
config/environments/production.rb

LocalPictureIO

LocalPictureIOを使う場合は、config/environments/development.rb で、以下のように書く。

require 'local_picture'
PictureIO.setup do |config|
  config.original_picture_io = PictureIO::LocalPicture.new '/pettanr/original/'
  config.resource_picture_io = PictureIO::LocalPicture.new  '/pettanr/resource/'
end

これで原画は/pettanr/original/に保管され、素材は/pettanr/resource/に保管される。

※パス処理がショボいのでスラッシュの有無に大きな違いがある。あと、ディレクトリ掘ってないとコケる。

S3PictureIO

AmazonAWSを使うなら、当然S3が使えるよう、準備しておく。Amazonからキーがもらえるので設定する。

まず、config/aws.yaml.orgをコピーする。

cp config/aws.yaml.org config/aws.yaml
コピーしたaws.yamlを編集。
access_key_id: XXXXXXXXXXXXXXXXXXXX
secret_access_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

S3PictureIOを使う場合は、config/environments/production.rbで、以下のように書く。

require 'aws/s3'
require 'yaml'

y = YAML.load(open(Rails.root + 'config/aws.yaml').read)
AWS::S3::Base.establish_connection!(
  :access_key_id => y["access_key_id"], 
  :secret_access_key => y["secret_access_key"]
)
require 's3_picture'
PictureIO.setup do |config|
  config.original_picture_io = PictureIO::S3Picture.new 'pettanr-original'
  config.resource_picture_io = PictureIO::S3Picture.new 'pettanr-stable'
end
これで原画はpettanr-original/に保管され、素材はpettanr-stable/に保管される。