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/