Javascript 资产管道:404 错误 - 如何在 Rails 中包含 Google 分析代码?

Javascript asset pipeline: 404 error - How to include Google analytics code in Rails?

我正尝试在我的 Rails 应用程序中包含 Google 分析,但 Rails 其资产管道存在问题。

我创建了一个新文件 (app/assets/javascripts/google-analytics.js),其中包含 Google 提供的 Javascript 代码。我向 application.html.erb 添加了以下行:javascript_include_tag 'google-analytics' if Rails.env.production?.

不幸的是,它在生产中不起作用。推送到Heroku后,源码包括:<script src="/javascripts/google-analytics.js"></script>。但是它找不到 javascript 文件,也就是说,如果我在源代码中单击这个 link,它会产生 404 错误页面。我做错了什么?


更新: 如果我将 Rails.application.config.assets.precompile += ['google-analytics.js'] 添加到 production.rb,它会起作用。如果我将此行添加到 assets.rb 而不是 production.rb,它现在可以工作了。我宁愿将它放在 assets.rb 中以保持整洁。有谁知道为什么它不能与 assets.rb 一起使用?

直接将 JS 文件包含在文件夹 /public/assets/google-analytics.js 中是否是一个很好的替代方案?然后我不需要将文件包含在 /app/assets/javascripts/google-analytics.js 中,也不需要 production.rbassets.rb?

中的预编译行

更新前的 Heroku 日志尾部:

heroku[router]: at=info method=GET path="/assets/application-1d520c66bc88***583e462611.css" host=***.herokuapp.com request_id=***  fwd="***" dyno=web.1 connect=0ms service=2ms status=304 bytes=93
heroku[router]: at=info method=GET path="/assets/application-2b1c01f66fb87e***bd707657bc1acf7.js" host=***.herokuapp.com request_id=*** fwd="***" dyno=web.1 connect=1ms service=2ms status=304 bytes=93
heroku[router]: at=info method=GET path="/javascripts/google-analytics.js" host=***.herokuapp.com request_id=*** fwd="***" dyno=web.1 connect=1ms service=4ms status=404 bytes=1708
app[web.1]: Started GET "/javascripts/google-analytics.js" for *** at 2015-07-15 11:11:23 +0000
app[web.1]: ActionController::RoutingError (No route matches [GET] "/javascripts/google-analytics.js"):
app[web.1]:   vendor/bundle/ruby/2.2.0/gems/actionpack-4.2.3/lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
etc.

您启用了资产管道吗?

然后包括

//= require google-analytics.js

application.js 文件中然后 运行

rake assets:precompile

在生产服务器上并重新启动您的 rails 应用程序并检查。

Rails 系统需要知道该文件的预编译。 默认情况下,它与 application.js 一起使用,但如果您创建一个新的清单文件,则必须包含它。

config/initializers/assets.rbproduction.rb中添加以下行:

Rails.application.config.assets.precompile << ['google-analytics.js']