assets precompilation のデフォルトの動きと設定の変更

概要

railsのassets pipelineのEngine Yard Cloudへのdeploy時のprecompileについて解説します。

デフォルトの動きを解説した後、変更できる設定を紹介します。

設定の変更はconfig/ey.ymlに記述することで行います。

Engine Yard Cloudのデフォルトの動き

  • 自動的にprecompileの必要性を判断します
  • さらに、assetsに変更がない場合は自動的にprecompileをスキップします
  • すべてのAppプロセスが動いているサーバで実行されます

 

具体的に、いずれかの場合はprecompileはスキップされます。それ以外は実行されます。

  • railsのconfig.assets.enabled = falseと設定されて
  • public/assets/*がリポジトリにコミットされている

さらに、以下の場合は現在使われているprecompileされたassetsが再利用されます。

  • railsのconfig.assets.enabled = true としているか
  • config/ey.ymlの設定を precompile_assetsをtrueに設定してあり
  • かつ前回のdeployと今回のdeployでassetsに変更がない場合

deploy時のprecompile の on/offを設定(推奨)

config/ey.ymlをセットすることで、明示的にprecompileをon/offを設定することができます。

これにより、コンパイルに失敗した場合deployを止めることができます。

また、falseを設定することでprecompileをしないように設定することができます。

defaults:
  precompile_assets: true

precompileを必ず実行する設定

assetsに変更がなくても、必ずprecompileを走らせたい場合は以下を設定します。

defaults:
  precompile_assets: true
  precompile_unchanged_assets: true

 

カスタマイズしたprecompile taskを設定

precompileを他のrake takeに置き換えることもできます。

例えば lib/tasks/assets.rakeに以下のようなタスクを追加します。(default: assets:precompile)

namespace :assets do                                                                                                                                                                                
  task :custom do                                                                                                                                                                                   
    Rake::Task['assets:precompile'].invoke                                                                                                                                                        
    File.open("./custom_#{Time.now.to_i}", 'w').close                                                                                                                                           
  end                                                                                                                                                                                               
end

そして、config/ey.ymlに以下を記述します。

defaults:
  precompile_assets: true
  precompile_assets_task: assets:custom

特定のサーバでのみprecompileする設定

デフォルトはAppのプロセスが動いているサーバ全てでprecompileされます。(default: [:app_master, :app, :solo])

utilサーバでも動かしたい、AppMasterのみにしたい場合などに設定を変更することができます。

下記設定では、utilサーバとAppMasterでprecompileされます。asset_rolesは配列を設定します。

defaults:
  precompile_assets: true
  asset_roles:
    - :app_master
- :util

参考

ey.ymlのセットアップについて詳しく書いたReadMeになります。

https://github.com/engineyard/engineyard-serverside#rails-assets

 

コメント

  • Avatar
    Yu Kitazume

    Smallインスタンスではasset compileにとても時間がかかることがあります。

    • ローカルでコンパイルする

    - turbo-sprockets-rails3などgemを使って不要なcompileを減らす

    などの対応方法があります。

    0
    コメントアクション Permalink

サインインしてコメントを残してください。

Powered by Zendesk