2015-06-11 41 views
1

我的Rails 4應用程序中的CSS和JavaScript無法在生產中加載,但在分段中成功。 config/environments/staging.rbconfig/environments/production.rb之間唯一的區別是這一行:Rails 4:將config.assets.compile設置爲false取消激活整個Sprockets

config.assets.compile = true上升級,並在生產

config.assets.compile = false

在部署和生產中,我都在部署期間執行rake assets:precompile。是的,加入了指紋的資產是高高興興地位於public/assets

這是很有誘惑力,只是舉起手,哭了「見鬼,我還有其他事情代碼」,並just set config.assets.compile = true on production,但據我所知這使得現場編輯,它動態編譯Sass和CoffeeScripts,而且我們不希望在我們的實時網站上獲得這種性能稅。

但是,在生產中設置config.assets.compile = false不會生成正確指紋的URL以正確指向預編譯的資產。

在升級中,我的application.css高興地指向https://staging.example.com/assets/application-8b1ca5ff4a98a7b28b0e932fe7412421.css。這是好的,好的,幸福的和美好的。

在生產中,它令人沮喪的https://www.example.com/stylesheets/application.css

點我怎麼那麼我仍然在生產中使用的資產管道(鏈輪)沒有現場編輯?任何能在頭髮枯竭之前幫助我的人都會受到真正的讚賞。

回答

0

我想我知道答案。將我的發現留給未來的訪問者。

這是我部署代碼的部署系統(Amazon OpsWorks)中的時間問題,然後assets:precompile d。第一次部署不起作用。然而第二個確實。當所有app/assets的md5sum不變時,系統不會assets:precompile

這使我得出結論如下

如果config.assets.compile = false

Rails的尋找public/assets/manifest-md5hash.json。如果存在,它會提供/assets/application-md5hash.css指紋版本。如果它不存在,它將顯示/stylesheets/application.css版本。