25

私は実行中のRails 3.2.1アプリケーションを持っています。そのアプリケーションは、というdeploy:assets:precompileタスクを実行してCapistrano経由で展開しています。Rails 3のアセットをより高速にプリコンパイルする方法を教えてください。

コンパイル自体が本当に遅いことを除いて、すべてうまく動作します。私はあまりCSSとJavaScript(合計約8200行)がありません。

通常、アセットのコンパイルには約1〜3分かかり、展開時間全体の約90%です。

これを最適化する方法はありますか?たぶん、別の手順を使用して資産をコンパイルするか、何とかそれを最適化しますか?

1.9.2-p290、Rails 3.2.1でLinode 512でアプリを実行しています。関連性がある場合はtherubyracer gemを使用しています。

+0

これを最速のサーバーでコンパイルし、このコンパイル後にコミットします。 – shingara

+0

config.assets.initialize_on_precompileはどのように設定されていますか? –

答えて

21

これは、より速く実行するための答えではありませんが、実際に変更を加えたときには、「異なる手順」が進む限り、Capistranoにアセットをプリコンパイルするよう指示できます。あなたはカスタムのassets:precompileタスクをこのようにして、既存のコードと新しくデプロイされたコードとの間のgitログを調べたいでしょう。私にとって、これは素晴らしい仕事をして資産を更新する際に、今私は遅い展開に対処する必要があります。

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/ | 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 

出典:http://www.bencurtis.com/2011/12/skipping-asset-compilation-with-capistrano/

16

私はちょうどturbo-sprockets-rails3と呼ばれる、Railsの内部でこの問題を解決するための宝石を書きました。 assets:precompileは、変更されたファイルを再コンパイルするだけで、すべてのアセットを生成するために一度コンパイルするだけで高速化されます。あなたのアセットディレクトリはリリース間で共有されているので、Capistranoの箱の外で動作します。

もし私がturbo-sprockets-rails3の宝石を試してみて、問題がある場合は教えてください。

関連する問題