2012-07-15 44 views
10

我已經看到了在Rails中執行惰性資產預編譯的各種令人費解且通常無效的解決方案。作爲後端開發人員,我不特別想重新編譯每次部署程序時都不會觸及的資產,但由於資產通過通過Capfile加載,而不是通過定義deploy.rb中的任務加載,因此我無法想象通過何種方式有條件地禁用它。有條件地禁用Capistrano中的資源預編譯

我之後的行爲是使用cap deploy進行定期預先部署,並使用cap deploy:no_assets跳過資產部署。

回答

7

rails4通過預編譯已更改的資源,解決了此問題,因爲它是新版本的鏈輪。與此同時,爲您的rails3應用程序我推薦turbo-sprockets-rails3寶石。

這種寶石開始了作爲一個set of patchessprockets-rails由Nathan布羅德,因爲這個問題已經在解決rails4其中並沒有合併到master。自述:

  • 加快你的Rails 3個耙資產:僅重新編譯改變資產預編譯,根據自己的源文件的哈希

  • 只編譯一次,同時生成按手印和非-fingerprinted資產

和:

turbo-sprockets-rails3應該開箱即用最新版本的Capistrano。

我可以證實,它適用於在Capistrano部署的rails-3.2.x應用程序上運行良好。

作爲一個側面說明了GitHubbers,原來pull request是如何提交代碼的開源項目一個很好的例子,即使沒有合併。

+1

只需切換到這個自己,可以證明它的偉大! – RubberDucky 2013-02-19 14:24:26

+2

我確實有Rails 4.0,我不會更改任何資產,但它只是從頭開始重新編譯所有內容。任何想法? – scaryguy 2014-02-25 18:02:27

1

這個要點看起來非常有前途https://gist.github.com/3072362

它檢查從上部署git的日誌,現在看看是否有%w(app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb)任何變化,如果是這樣,只有預編譯即可。

+0

我已經安裝了這個和它相似的要點,但它似乎沒有任何效果。如果我在我的capfile中保留'load'deploy/assets'',那麼在不需要時它不會停止預編譯。如果我拿出'load'deploy/assets'',即使它需要,它也不會預編譯。 即使在代碼更新後添加了觸發器以觸發它。 – RubberDucky 2012-07-16 03:18:26

+0

我認爲你可能不需要這個要求在你的config/deploy.rb文件中。它會覆蓋deploy:assets:預編譯任務。你應該在你的Capfile中保存'load'deploy/assets''。 – 2012-07-16 17:05:22

+0

這比turbo-sporocket-rails還要快,因爲它跳過了整個檢查過程,這對我來說需要幾分鐘的時間。 – lulalala 2013-05-15 03:00:16

14

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-軌道尚需分鐘的時候,什麼都沒有改變做檢查。當我需要儘快解決服務器問題時,這可能至關重要。所以我需要我的強制跳繩方法。

+0

你究竟在哪裏添加了這個代碼來使其工作? – 2014-01-13 22:46:55

+0

@dtmunir我在deploy.rb文件的末尾添加了它。 – lulalala 2014-01-14 01:43:07

+0

這是一個很好的解決方案。在與Capistrano 2的Rails 4應用程序,它仍然有效。只需要小心,你沒有任何其他工作與'deploy:assets:precompile'鏈接,否則他們也會被跳過。 – 2014-07-02 03:09:42

相關問題