働かないプログラマのメモ帳

2013-03-20

Railsアプリケーションを公開するならAssets on Cloudパターンを使おう

Assets on Cloudパターンとは

f:id:lettas0726:20130320183553p:image

「Assets on Cloudパターン」*1Railsデザインパターン*2の一つ。Railsアプリケーションの静的なコンテンツ(Assets)をクラウドに配置するパターンである。ファイルサイズの大きい画像などをクラウドに配置することでウェブサーバへのリクエストを減らし、ネットワークリソースを節約する。

Assetsの配置先はAmazon S3を推奨する。

asset_syncの使い方

「Assets on Cloudパターン」はasset_syncというgemを利用する。

Amazon S3の設定方法

f:id:lettas0726:20130320183552p:image

asset_syncを設定する前にAmazon S3でバケットを作っておく。バケット名を自分が持ってるドメインサブドメインと同じにしておくと少しだけ幸せになれる。ドメインを持っていない場合、適当なバケット名でもいいが、全世界で一意にする必要がある。(他の人と同じバケット名でバケットを作成することができないので注意)

また、国内ならRegionをTokyoにしておかないと、ネットワークの速度が遅くなってしまうので注意。

以降はTokyoリージョンに作成したassets.example.comというバケットで説明を進める。

asset_syncの設定方法

Gemfileに以下の記述を追加する。

gem 'asset_sync'

以下の内容でconfig/asset_sync.ymlを用意する。

defaults: &defaults
  fog_provider: 'AWS'
  fog_directory: 'assets.example.com'
  fog_region: 'ap-northeast-1'
  aws_access_key_id: '<AWSのACCESS KEY>'
  aws_secret_access_key: '<AWSのSECRET ACCESS KEY>'
  existing_remote_files: delete
  manifest: true
  gzip_compression: true

development:
  <<: *defaults

test:
  <<: *defaults

production:
  <<: *defaults

config/environments/production.rbに以下の記述を追加する。

  config.action_controller.asset_host = '//s3-ap-northeast-1.amazonaws.com/assets.example.com'

以上で設定は完了。Assetsのprecompile時に自動的に配置されるようになる。

$ bundle exec rake assets:precompile

capistranoとの連携

f:id:lettas0726:20130320183550p:image

capistranoの設定方法

Railsの汎用デプロイツールであるcapistranoと組み合わせることで、アプリケーションデプロイと同時にAssetsをクラウドに配置することができる。

config/deploy.rbに以下の記述を追加する。

namespace :assets do
  task :precompile, :roles => :web do
    run "cd #{current_path} && RAILS_ENV=#{rails_env} bundle exec rake assets:precompile"
  end

  task :cleanup, :roles => :web do
    run "cd #{current_path} && RAILS_ENV=#{rails_env} bundle exec rake assets:clean"
  end
end
after :deploy, 'assets:precompile'

Amazon S3ならCDNの導入もスムーズ

f:id:lettas0726:20130320183551p:image

Amazon S3Amazon CloudFront(CDNサービス)との相性がいいため、CDNの導入がスムーズにできる。公開したアプリケーションへのアクセスが増えてきたら導入を検討してもいいだろう。

また、Amazon S3は1GBまでなら月額10円程度で使うことができる。しかもAWSに新規で登録したユーザなら12ヶ月間無料で使うことができる。まだAWSアカウントを持っていないユーザはこの「Assets on Cloudパターン」を今すぐ無料で試そう。

*1:僕が勝手に名付けました

*2:僕が勝手に作ったデザインパターンです

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/lettas0726/20130320/1363773153
リンク元