使用Ruby 2.0和Rails 4.0,我在资产管道上看到了不同的行为,我不知道为什么。这是它的要点......
我的./app/assets/javascripts文件夹中包含application.js.coffee和google_analytics.js.coffee文件。
在我的app / views / layouts / application.html.haml中,我有以下两行:
= javascript_include_tag "application"
= javascript_include_tag "google_analytics"
一旦部署到生产中,这会在呈现的页面中产生以下内容:
<script src="/assets/application-f15feb4200e0d1db4963a00b28fbe9ca.js"></script>
<script src="/javascripts/google_analytics.js"></script>
请注意,application
include会按预期编译到资源管道中,而google_analytics
脚本则不会。
在开发模式中,所有内容都是从资产管道提供的,没有预期的指纹:
<script src="/assets/jquery.js?body=1"></script>
<!-- several other includes suppressed for brevity here -->
<script src="/assets/application.js?body=1"></script>
<script src="/assets/google_analytics.js?body=1"></script>
我还检查了生产部署,并注意到google_analytics
没有预先编译和指纹识别。
编辑:收到以下评论和答案后,将以下内容添加到config / environments / production.rb并尝试进行另一次部署:
ComingSoon::Application.configure do
config.serve_static_assets = false
config.assets.js_compressor = :uglifier
config.assets.compile = false
config.assets.digest = true
config.assets.version = '1.0'
config.assets.precompile += ['google_analytics.js.coffee']
end
为什么sprockets资产管道不会预编译google_analytics
脚本并像application script
一样提供它?我该如何解决这个问题?
答案 0 :(得分:3)
您可以将google脚本添加到config.assets.precompile设置中config / environments / production.rb文件中的预编译列表中。更多信息:What is the purpose of config.assets.precompile?
答案 1 :(得分:1)
需要将google_analytics文件添加到预编译列表中:
config.assets.precompile += ['google_analytics.js.coffee', ..]
根据需要将上方添加到application.rb
或production.rb
。
注意:除非您在application.js清单文件中通过直接require
或require_tree
要求该文件,否则js不会被编译。