【发布时间】:2012-11-22 09:20:22
【问题描述】:
这里是 mobile.js
//= require jquery
//= require iui
//= require faye-updater
//= require anonymous-chat
//= require anonymous-vote
//= require_self
这是我包含脚本的方式
<%= content_for :head do %>
<%= javascript_include_tag "#{Settings.faye.address}/client.js" %>
<%= javascript_include_tag "mobile" %>
<% end %>
以及我在重新编译资产后得到的结果:mobile....js 从
开始function launch_faye_updater....
这是来自 faye-updater.js 的函数,它必须包含在 jquery 和 iui 之后。由于包含顺序错误,它不起作用。如何让 Rails 以正确的顺序包含资产?
UPD:这是在生产模式 Rails 3.2.8
【问题讨论】:
-
您使用的是什么版本的 Rails?看起来您正在做正确的事情以正确的顺序编译资产。您是否在环境配置中添加了要编译的 mobile.js?设置配置值
config.assets.precompile += %w( mobile.js ) -
是的,我只添加了这个 config.assets.precompile
-
这似乎不对 - 您只需要预编译顶级资产,即其他主资产未包含的资产。尝试添加 mobile.js。
-
我知道这是不对的,但是如果 mobile.js 也预编译有什么区别呢?它对包含顺序有何影响?
-
由于 mobile.js 包含其他 js 文件,预编译将(或应该)组合 jquery、iui、faye-updater、anonymous-chat、anonymous-vote,然后是自身。将该正则表达式添加到预编译列表将编译每个文件,这意味着其中一些 javascript 被编译两次。这可能会导致您在资产中看到的效果。
标签: ruby-on-rails ruby-on-rails-3 assets