こんにちは、tahara です。
ようやく いこーよ も エンパ においつき Rails4 になりました! おいつかれたエンパ担当者は、「エンパはRails6くらいにしたい」などのたまっていましたが、 その時はエイリアンテクノロジーでつきはなしたいと思っています。
さて、Rails4 になって困ったことがありました。 Rails3 の時は10分ちょっとで終っていた本番デプロイが20分くらいかかるようになってしまったのです。 assets:precompile がとても遅いのです。
たくさんの画像ファイルと、大きな CSS ファイルがわるいのですが、 さすがに時間がかかりすぎます。
なんとかならないものかと、最初に試してみたのが Rails4なのにassets:precompileが遅い です。
これで速くなった! と喜んでいたのですが、
同じファイル名のまま画像を変えた時に *.js.erb
が
再プリコンパイルされないという問題にぶつかり、あきらめました。
次に試したのが Rails deployments from 4 minutes to 40 seconds です。 ローカルで assets:precompile して tar でかため、それをアップロードする方法です。 これはうまくいきました! 特に問題もなく Rails3 の時と同じくらいの時間で本番デプロイできるようになりました。 よかった。
上記のエントリのコードにはこちらでは使わないものが入ってたりしたので、 次のようなコードを config/deploy.rb に書いています。
namespace :deploy do namespace :assets do desc <<-DESC Precompiles assets locally. DESC task :precompile, :roles => lambda { assets_role }, :except => { :no_release => true } do run_locally "rm -rf public/assets tmp/cache" run_locally "RAILS_ENV=#{rails_env.to_s.shellescape} #{rake} assets:precompile" run_locally "cd public && tar -jcf assets.tar.bz2 assets" top.upload "public/assets.tar.bz2", "#{shared_path}", via: :scp run "cd #{shared_path} && rm #{shared_path.shellescape}/#{shared_assets_prefix}/manifest-* && tar -jxf assets.tar.bz2 && rm assets.tar.bz2" run_locally "rm -rf public/assets.tar.bz2 public/assets tmp/cache" # Copy manifest to release root (for clean_expired task) run <<-CMD.compact cp -- #{shared_manifest_path.shellescape} #{current_release.to_s.shellescape}/assets_manifest#{File.extname(shared_manifest_path)} CMD end end end
そんなわけで、そろそろ並列 assets:precompile が導入されないかな、と期待しています。