[英]javascript_include_tag doesn't see js in vendors on production environment
[英]Why doesn't javascript_include_tag reference work?
在新的Rails應用中,它將具有以下標記,其中包括javascripts文件夾中的所有js文件:
<%= javascript_include_tag 'application'%>
它還在運行時對這些js文件創建了奇怪的引用:
<script src="/assets/cbpAnimatedHeader.self-2f56b42e64e4cd1aeca79d75fab98d1e72c4ee686ded129c7b6bd100065c0c84.js?body=1"></script>
當我使用上述文件中的頁面上的功能時,出現未找到錯誤。
如果我改為添加此引用,則一切正常:
<script src="assets/cbpAnimatedHeader.js"></script>
為什么javascript_include_tag參考無效?
在開發中,當您向Sprockets清單添加資產時,如下所示:
// app/assets/javascripts/foo.js
//= require bar
//= require baz
並使用Rails資產助手:
<%= javascript_include_tag "foo" %>
Rails將為foo.js
創建一個腳本標簽,為bar
和baz
創建一個腳本標簽。 附加的文件名是摘要-這是一個校驗和,用作高速緩存破壞機制,因此您不必在生產中處理瀏覽器高速緩存問題。
通過使用單個腳本標簽,由於在單個文件中而不是在串聯文件中*獲得行號,因此更容易進行故障排除。
在生產中,您可以在部署之前編譯資產,或者設置執行相同功能的后期提交掛鈎。 后者通常不那么容易發生人為錯誤,並且在git歷史中產生的噪音也更少。
編譯Rails時,會將bar
和baz
連接到foo.js
。 <%= javascript_include_tag "foo" %>
使用foo.js
創建單個腳本標簽-再次包含摘要作為緩存清除機制。
這很可能是因為排序不正確-如果腳本具有必須先可用的依賴項,則您不應該依賴//= require_tree .
加載它!
相反,您將執行以下操作:
//= require 'cbpAnimatedHeader'
//= require_tree .
http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets
運行時看起來奇怪的引用
它們是資產文件的fingerprints
:
指紋識別是一種使文件名取決於文件內容的技術。 文件內容更改時,文件名也更改。 對於靜態或不經常更改的內容,這提供了一種簡單的方法來判斷文件的兩個版本是否相同,即使在不同的服務器或部署日期之間也是如此。
這是Rails功能的標准部分-在您預編譯資產並在生產中運行它們時尤其明顯。
-
為什么
javascript_include_tag
參考無效?
它可能會...
<%= javascript_include_tag 'application'%>
這將調用app/assets/application.js
。 這不是問題,但這意味着您必須確保已將所有js
文件包含在sprockets manifest directives
:
#app/assets/javascripts/application.js
// ...
//= require jquery
//= require jquery_ujs
//= require_tree .
必須注意,上面的外觀在app/assets/javascripts
文件夾中(看來cbpAnimatedHeader.js
在app/assets
。
考慮到您有app/assets/javascripts/cbpAnimatedHeader.js
,以上代碼應該可以正常工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.