【发布时间】:2014-08-21 19:12:05
【问题描述】:
所以突然在运行ruby 2.1.2p95 和rails 3.2.14 的生产服务器上,我开始收到一个看起来像underscore.js 的错误。这仅在此服务器上。
Uncaught SyntaxError: Unexpected token ILLEGAL
b/c 这是生产,代码被缩小,但使用 chrome 来扩展它,这就是问题所在:
S.template = function(e, t, n) {
var i;
n = S.defaults({}, n, S.templateSettings);
var r = new RegExp([(n.escape || L).source, (n.interpolate || L).source, (n.evaluate || L).source].join("|") + "|$", "g"), s = 0, a = "__p+='";
e.replace(r, function(t, n, i, r, o) {
return a += e.slice(s, o).replace(O, function(e) {
return "\\" + P[e]
}), n && (a += "'+\n((__t=(" + n + "))==null?'':_.escape(__t))+\n'"), i && (a += "'+\n((__t=(" + i + "))==null?'':__t)+\n'"), r && (a += "';\n" + r + "\n__p+='"), s = o + t.length, t
}), a += "';\n", n.variable || (a = "with(obj||{}){\n" + a + "}\n"), a = "var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n" + a + "return __p;\n";
try {
i = new Function(n.variable || "obj", "_", a) // <---- right here --<<
} catch (o) {
throw o.source = a, o
}
if (t)
return i(t, S);
var l = function(e) {
return i.call(this, e, S)
};
return l.source = "function(" + (n.variable || "obj") + "){\n" + a + "}", l
}
现在显然我还没有触及 underscore.js 代码本身,我尝试下载了最新版本的 underscore.js,但仍然得到同样的结果。
只是想看看我是否可以在本地机器上重现错误,我将项目设置为 production 和 rake assets:precompile,但我仍然没有在本地收到错误。
我的猜测是,这与我的 Gem 版本或我服务器上的实际环境有关,但我已经调试了一段时间,并没有发现任何变化。
Gemfile:(不含无关的宝石)
gem 'rails', '3.2.14'
gem 'json'
group :assets do
gem 'sprockets'
gem 'sass-rails'
gem 'coffee-rails'
gem 'uglifier'
gem 'haml_coffee_assets', '1.8.2'
gem 'execjs'#, '1.4.0'
gem 'therubyracer'#, '0.10.2', :require => 'v8'
gem 'momentjs-rails'
end
# javascript gems
gem 'jquery-rails', '2.1.4'
任何帮助将不胜感激,谢谢
【问题讨论】:
-
该错误与作为参数传递给 Function 构造函数的参数有关。了解它的价值是弄清楚发生了什么(或至少是开始)的关键。
-
而且看起来问题源于模板中的错误,因此请检查最近更改了哪些模板文件。
-
最近我的模板代码没有任何变化。它出现在每个使用 Backbone/Underscore 的页面上。同样,这只发生在我们的生产服务器上,并且在几天前部署后才开始。
标签: javascript ruby-on-rails ruby underscore.js asset-pipeline