我已經看到了在Rails中執行惰性資產預編譯的各種令人費解且通常無效的解決方案。作爲後端開發人員,我不特別想重新編譯每次部署程序時都不會觸及的資產,但由於資產通過通過Capfile
加載,而不是通過定義deploy.rb
中的任務加載,因此我無法想象通過何種方式有條件地禁用它。有條件地禁用Capistrano中的資源預編譯
我之後的行爲是使用cap deploy
進行定期預先部署,並使用cap deploy:no_assets
跳過資產部署。
我已經看到了在Rails中執行惰性資產預編譯的各種令人費解且通常無效的解決方案。作爲後端開發人員,我不特別想重新編譯每次部署程序時都不會觸及的資產,但由於資產通過通過Capfile
加載,而不是通過定義deploy.rb
中的任務加載,因此我無法想象通過何種方式有條件地禁用它。有條件地禁用Capistrano中的資源預編譯
我之後的行爲是使用cap deploy
進行定期預先部署,並使用cap deploy:no_assets
跳過資產部署。
rails4通過預編譯已更改的資源,解決了此問題,因爲它是新版本的鏈輪。與此同時,爲您的rails3應用程序我推薦turbo-sprockets-rails3寶石。
這種寶石開始了作爲一個set of patches爲sprockets-rails
由Nathan布羅德,因爲這個問題已經在解決rails4其中並沒有合併到master
。自述:
加快你的Rails 3個耙資產:僅重新編譯改變資產預編譯,根據自己的源文件的哈希
只編譯一次,同時生成按手印和非-fingerprinted資產
和:
turbo-sprockets-rails3應該開箱即用最新版本的Capistrano。
我可以證實,它適用於在Capistrano部署的rails-3.2.x應用程序上運行良好。
作爲一個側面說明了GitHubbers,原來pull request是如何提交代碼的開源項目一個很好的例子,即使沒有合併。
這個要點看起來非常有前途https://gist.github.com/3072362
它檢查從上部署git的日誌,現在看看是否有%w(app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb)
任何變化,如果是這樣,只有預編譯即可。
我已經安裝了這個和它相似的要點,但它似乎沒有任何效果。如果我在我的capfile中保留'load'deploy/assets'',那麼在不需要時它不會停止預編譯。如果我拿出'load'deploy/assets'',即使它需要,它也不會預編譯。 即使在代碼更新後添加了觸發器以觸發它。 – RubberDucky 2012-07-16 03:18:26
我認爲你可能不需要這個要求在你的config/deploy.rb文件中。它會覆蓋deploy:assets:預編譯任務。你應該在你的Capfile中保存'load'deploy/assets''。 – 2012-07-16 17:05:22
這比turbo-sporocket-rails還要快,因爲它跳過了整個檢查過程,這對我來說需要幾分鐘的時間。 – lulalala 2013-05-15 03:00:16
turbo-sporocket-rails和自動跳過腳本都有一些缺陷(我會在後面提到)。所以我用下面的技巧,所以我可以傳遞參數跳過資產預編譯我的意志:
callback = callbacks[:after].find{|c| c.source == "deploy:assets:precompile" }
callbacks[:after].delete(callback)
after 'deploy:update_code', 'deploy:assets:precompile' unless fetch(:skip_assets, false)
這個腳本會改變內置資產預編譯掛鉤,所以它會根據掛鉤skip_assets參數。我可以調用cap deploy -S skip_assets=true
作爲一個整體跳過資產預編譯。
對於我來說,渦輪sporocket-軌道尚需分鐘的時候,什麼都沒有改變做檢查。當我需要儘快解決服務器問題時,這可能至關重要。所以我需要我的強制跳繩方法。
你究竟在哪裏添加了這個代碼來使其工作? – 2014-01-13 22:46:55
@dtmunir我在deploy.rb文件的末尾添加了它。 – lulalala 2014-01-14 01:43:07
這是一個很好的解決方案。在與Capistrano 2的Rails 4應用程序,它仍然有效。只需要小心,你沒有任何其他工作與'deploy:assets:precompile'鏈接,否則他們也會被跳過。 – 2014-07-02 03:09:42
只需切換到這個自己,可以證明它的偉大! – RubberDucky 2013-02-19 14:24:26
我確實有Rails 4.0,我不會更改任何資產,但它只是從頭開始重新編譯所有內容。任何想法? – scaryguy 2014-02-25 18:02:27