在Rails 3.1中,您必須將您希望包含在資源預編譯中的文件列入白名單。您必須打開配置/環境/ production.rb並明確包括資產你想預編譯:config.assets.precompile的用途是什麼?
config.assets.precompile += ['somestylesheet.css']
如果你不這樣做,這一點,你運行耙資產:預編譯,你的資產會不會被複制到公共/資產,並且您的應用程序會在找不到資產時引發異常(因此會導致生產中出現500錯誤)。
這是爲什麼這是必要的?爲什麼全部資產自動預編譯?
這種當前的方法在部署時會產生額外的代碼和壓力。黑名單/排除資產不是很容易嗎,所以事情就是開箱即用的。其他人分享這些感受?
只是爲了澄清,這更多的是**需要明確**指定資產的批評。 rails預編譯過程不僅僅是編譯代碼,它還會將編譯後的資源代碼複製到Web服務器的公共目錄中。 即使資產不需要編譯(如簡單的'.js'文件),您仍然需要告訴應用程序「預編譯」它,以便將其複製到'public/assets'。如果您不這樣做,那麼需要該資產的頁面會引發異常。 – dhulihan
如果您正在合併和縮小文件的練習中,您可能不希望預編譯所有資產。此技術適用於您計劃單獨包含的資產。例如,在application.js中,您可以'需要'許多其他不需要預編譯的JS文件。 –
@Simon Peck:你說的對,一些資產不需要預先編譯,但如果它們沒有明確包含,它們將不會被複制到最終資產位置(例如:'public/assets'),並且在請求時不會被找到。 使用'// = require'將資產添加到'application.js'工作,但會增加帶寬開銷,並且不適用於不會在站點範圍內使用的資產。 – dhulihan