Stu*_*art 32 ruby-on-rails asset-pipeline
我有一个Rails 4应用程序
<%= javascript_include_tag "modernizr", "data-turbolinks-track" => true %>
Run Code Online (Sandbox Code Playgroud)
在头上.在开发中,将呈现以下HTML,并加载modernizr:
<script data-turbolinks-track="true" src="/assets/modernizr.js?body=1"></script>
Run Code Online (Sandbox Code Playgroud)
在生产中,渲染了followign HTML,并且未加载modernizr (未找到404):
<script data-turbolinks-track="true" src="/javascripts/modernizr.js"></script>
Run Code Online (Sandbox Code Playgroud)
在生产中,/assets/modernizr.js
被发现并可浏览.
在Rails文档说,javascript_include_tag
应该产生
<script data-turbolinks-track="true" src="/assets/modernizr.js?body=1"></script>
Run Code Online (Sandbox Code Playgroud)
在生产中,我stylesheet_link_tag
很好,链接到/assets/
目录.
为什么javascript_include_tag
链接/javascripts
而不是/assets
生产,我该如何解决?
mob*_*ent 21
AssetUrlHelper的一个用法语句表明它将生成/ javascripts/url,就像你看到的那样:
#asset_path"application",输入:: javascript#=> /javascripts/application.js
(来自asset_url_helper.rb第117行 - [ 1 ])
此代码看起来只有在预编译资产丢失时才能到达,因此看起来您的资产编译不起作用(我的部署通常会在发生这种情况时失败,因此您的部署甚至可能无法启动).
相同的asset_url_helper.rb调用/ javascripts/part'extname'并使用以下映射来了解如何生成名称:
# Maps asset types to public directory.
ASSET_PUBLIC_DIRECTORIES = {
audio: '/audios',
font: '/fonts',
image: '/images',
javascript: '/javascripts',
stylesheet: '/stylesheets',
video: '/videos'
}
Run Code Online (Sandbox Code Playgroud)
一个新的Rails 4应用程序在config/environments/production.rb中有这个
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
Run Code Online (Sandbox Code Playgroud)
这似乎符合你所看到的行为.
pat*_*was 12
默认情况下,Rails仅预编译application.js
,application.css
以及它在资产路径中找到的任何图像.因此,在生产中mordernizr将不会被预编译,因此javascript助手将无法找到该文件.
为了解决此问题,您可以通过修改以下配置将modernizr添加到预编译列表中 production.rb
config.assets.precompile += ['modernizr.js']
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅Rails指南
归档时间: |
|
查看次数: |
25705 次 |
最近记录: |