attachment_fuプラグインでus-east以外のAmazon S3を使う

attachment_fuプラグインをインストールします。

# ruby script/plugin install git://github.com/technoweenie/attachment_fu.git

sauberia-aws-s3パッケージをインストールします。

# sudo gem install sauberia-aws-s3

aws-s3の代わりにsauberia-aws-s3を使うように、config/environment.rbに書き加えます。

FILE : config/environment.rb

config.gem 'sauberia-aws-s3', :lib => 'aws/s3'

バケット名とディレクトリ名の組み合わせをバケット名として渡すことができなくなるため、目的に応じてバケットを分割します。

以前はこういう書き方ができました。バケット名とディレクトリ名の組み合わせをバケット名として渡すことで、ひとつのバケットを複数の目的に使うことができたのですが、今回の修正を加えるとできなくなります。

FILE : config/amazon_s3.yml

development:
  bucket_name: mybucket/development
production:
  bucket_name: mybucket/production

代わりに、目的に応じてバケットを分割し、それぞれに異なるバケット名を渡します。

FILE : config/amazon_s3.yml

development:
  bucket_name: mybucket-development
production:
  bucket_name: mybucket-production

attachment_fuプラグインの中身にも同様の修正を加えます。

FILE : /vendor/plugins/attachment_fu/lib/technoweenie/attachment_fu/backends/s3_backend.rb:273

         #
         # The optional thumbnail argument will output the thumbnail's filename (if any).
         def s3_url(thumbnail = nil)
-          File.join(s3_protocol + s3_hostname + s3_port_string, bucket_name, full_filename(thumbnail))
+          File.join(s3_protocol + bucket_name + '.' + s3_hostname + s3_port_string, full_filename(thumbnail))
         end
         
         # All public objects are accessible via a GET request to CloudFront. You can generate a