Rails + capistranoの環境で、assetsに変更が無い場合assets precompileを飛ばして、デプロイを高速化する方法。
前に設定云々でハマった事があったのでメモ。
高速化のソースコードについては下記。
http://stackoverflow.com/questions/9016002/speed-up-assetsprecompile-with-rails-3-1-3-2-capistrano-deployment
config/deproy.rb内に下記を追加
namespace :deploy do namespace :assets do task :precompile, :roles => :web, :except => { :no_release => true } do from = source.next_revision(current_revision) if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ lib/assets/ | wc -l").to_i > 0 run %Q{cd #{latest_release} && #{rake} RAILS_ENV=#{rails_env} #{asset_env} assets:precompile} else logger.info "Skipping asset pre-compilation because there were no asset changes" end end end end
…とまでは書いてあるのですが、1つ条件があって、:deploy_via が :remote_cacheになってる時だけ上記の高速化が有効になります。
set :deploy_via, :remote_cache としている場合、各リビジョンのディレクトリ内に.gitを作成し、ローカルにgitレポジトリを作成し高速化を行います。
http://torokeru.tv/mameblog/?p=195
:remote_cache以外(:export等)を指定していると、上記ソースコード内
if capture("cd #{latest_release} && #{source.local.log(from)} vendor/assets/ app/assets/ lib/assets/ | wc -l").to_i > 0
部分で、wc -lが必ず0となりprecompileしてくれません。要注意。
なんで、:remote_cache以外使うんだって話なのですけどね…。
[PR]Spreeの情報を集めています。
ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/