javascript_include_tag不一致的行为

时间:2014-01-30 16:12:48

标签: ruby-on-rails ruby-on-rails-4 sprockets

使用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一样提供它?我该如何解决这个问题?

2 个答案:

答案 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.rbproduction.rb

注意:除非您在application.js清单文件中通过直接requirerequire_tree要求该文件,否则js不会被编译。