我有一个Rails 4应用程序
<%= javascript_include_tag "modernizr", "data-turbolinks-track" => true %>
在头上。在开发中,呈现以下HTML,并加载了modernizr:
<script data-turbolinks-track="true" src="/assets/modernizr.js?body=1"></script>
在生产中,将呈现followign HTML,并且不会加载modernizr(未找到404):
<script data-turbolinks-track="true" src="/javascripts/modernizr.js"></script>
在生产中,找到了
/assets/modernizr.js
并且可以浏览。
Rails documentation表示
javascript_include_tag
应该生成
<script data-turbolinks-track="true" src="/assets/modernizr.js?body=1"></script>
在生产中,我的
stylesheet_link_tag
很好,可以链接到
/assets/
目录。
为什么在生产环境中
javascript_include_tag
链接到
/javascripts
而不是
/assets
,我该如何解决?
请您参考如下方法:
AssetUrlHelper的用法说明之一表明它将产生/ javascripts /网址
就像您所看到的:
#asset_path“应用程序”,键入::javascript#=> /javascripts/application.js
(摘自asset_url_helper.rb第117行-[1])
该代码看起来只有在缺少预编译 Assets 的情况下才能到达
因此您的 Assets 编译似乎无法正常工作(通常是我的部署
发生这种情况时会失败,所以也许您甚至没有解雇。
相同的asset_url_helper.rb将/ javascripts /部分称为“extname”,
使用以下映射了解如何生成名称:
# Maps asset types to public directory.
ASSET_PUBLIC_DIRECTORIES = {
audio: '/audios',
font: '/fonts',
image: '/images',
javascript: '/javascripts',
stylesheet: '/stylesheets',
video: '/videos'
}
一个新的Rails 4应用程序在config / environments / production.rb中具有此功能
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
这似乎与您看到的行为相符。