【问题标题】:Javascripts not precompiled?Javascripts没有预编译?
【发布时间】:2013-06-07 22:59:54
【问题描述】:

在我的app/assets/javascripts/specific.js 我有

//= require_tree ./specific

app/assets/javascripts/specific/chat 我有pusher.js

另外,config/environments/production 我有

config.assets.precompile += %w( specific.js some_other_manifest.js )

但是,当我投入生产(在 heroku 上)时,它仍然抱怨 pusher.js 没有预编译。我在这里做错了什么?

在部署应用程序时,javascript 文件似乎已被编译。

来自 Heroku 日志:

   Compiled specific/chat/pusher.js  (0ms)  (pid 1042)
   Compiled specific.js  (60ms)  (pid 1042)

但是当我去看风景时,

 ActionView::Template::Error (specific/chat/pusher.js isn't precompiled):
     1: <%= javascript_include_tag 'specific/chat/pusher' %>
     2: <%= javascript_include_tag params[:controller] %>
     3: 
     4: <div id="chat-header">
   app/views/messages/index.html.erb:1:in `_app_views_messages_index_html_erb___3285714722884343394_70246542189040'

我还尝试将config.assets.precompile .. 选项放在config/application.rb 中,而不是production.rb

相关: Assets say "not precompiled" when they are precompiled

当我运行assets:precompile 并查看public/assets 文件夹时,我看到它们都是预编译的(例如specific-bfgbfbf4534535.js

所以资产实际上是预编译的,但错误说它没有预编译

在我看来:

&lt;%= javascript_include_tag 'specific/chat/pusher.js' %&gt;

【问题讨论】:

  • 我从来没有使用过 Heroku,所以我不知道这里是否有 Heroku 特有的东西。在您的 application.html.erb 中,您是否有一行 javascript_include_tag 'specific.js'
  • 它不应该包含在 application.html.erb 中

标签: ruby-on-rails-3 asset-pipeline


【解决方案1】:

您不包含特定文件,您包含整个清单,这就是清单的全部意义。

这不行:

<%= javascript_include_tag 'specific/chat/pusher' %>

相反,您需要一个顶级清单的包含:

<%= javascript_include_tag 'specifics' %>

根据您在问题下方的评论:

它不应该包含在 application.html.erb 中

这不是预编译资产的工作方式。您需要包含specifics.js,或构建另一个(更细粒度的)清单。清单的重点是它们会生成要包含的单个缩小的代码块。您特别说您在编译的资产文件夹中看到了specific-bfgbfbf4534535.js那个是要被包含的文件,它包含pusher.js

【讨论】:

  • 哇。您的回答澄清了我想了解的最后一点。那么当我执行javascript_include_tag params[:controller] 时,应用程序是否真的加载了application.js 中包含的特定部分,而不是查看some_controller.js.coffee
  • 错误,没有。你不应该这样做javascript_include_tag params[:controller],除非你已经为每个控制器设置了清单。它绝对不会加载application.js 的任何特定部分;它每次都加载所有application.js。由您自己编写 JavaScript 代码以使其正常工作,并且您的脚本不会相互干扰。
  • 这听起来更合乎逻辑。那么保留所有与每个控制器相关的自动生成的 js.coffee 文件的目的是什么?
  • @MaximusS 你没有保留它们,它只是作为组织助手。
【解决方案2】:

尝试预编译所有资产:

config.assets.precompile += %w( *.css *.js )

【讨论】:

  • 感谢您输入 Eru,但这并不能解决问题。 (我之前尝试过这个来解决其他问题)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多