25

我有一個滑軌3.2.1應用程序中,我通過Capistrano的與運行deploy:assets:precompile任務deploy/assets部署。如何讓Rails 3資源預先編譯更快?

一切都運行得很好,只是編譯本身實在是太慢了。我沒有太多的CSS和JavaScript(總計大約8200行)。

它一般需要大約1-3分鐘來編譯資產,這是整個部署時間約90%。

有什麼辦法來優化這個嗎?也許使用不同的過程來編譯資產或以某種方式優化它?

我在1.9.2-p290,Rails 3.2.1和使用therubyracer gem上運行Linode 512上的應用程序,如果這是任何相關性。

+0

在最快的服務器上進行編譯並在編譯之後提交。 – shingara 2012-02-15 14:11:00

+0

你有什麼config.assets.initialize_on_precompile設置爲? – 2012-02-15 15:09:27

回答

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

我剛寫了一個寶石來解決內部的Rails這個問題,叫turbo-sprockets-rails3 。它僅通過重新編譯更改的文件來加速您的assets:precompile,並且只編譯一次即可生成所有資產。它爲Capistrano開箱即用,因爲您的資產目錄在版本之間共享。

這將是真棒,如果你能幫助我考出turbo-sprockets-rails3寶石,讓我知道,如果你有任何問題。