在app/assets/javascripts/specific.js
我有
//= require_tree ./specific
在app/assets/javascripts/specific/chat
{p>我有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
)
所以资产实际上是预编译的,但是错误说它没有预编译
从我看来:
<%= javascript_include_tag 'specific/chat/pusher.js' %>
答案 0 :(得分:2)
您不包含特定文件,包括整个清单,这就是清单的全部内容。
这不起作用:
<%= javascript_include_tag 'specific/chat/pusher' %>
相反,您需要为顶级清单提供一个包含:
<%= javascript_include_tag 'specifics' %>
根据您的问题下方的评论:
它不应该包含在application.html.erb
中
这不是预编译资产的工作方式。您需要包含specifics.js
,或构建另一个(更精细)清单。清单的要点是它们产生了一个包含在内的单个缩小的代码块。您明确地说您在已编译的资产文件夹中看到specific-bfgbfbf4534535.js
; 是要包含的文件,它包含pusher.js
。
答案 1 :(得分:0)
尝试预编译所有资产:
config.assets.precompile += %w( *.css *.js )