Rails生产中出现意外的令牌ILLEGAL

时间:2014-08-21 19:12:06

标签: javascript ruby-on-rails ruby underscore.js asset-pipeline

在运行ruby 2.1.2p95rails 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并且仍然得到同样的东西。

只是为了查看我是否可以在本地计算机上重现错误,我将项目设置为productionrake 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'

非常感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:0)

好的...

我发现了问题。这是我用JavaScript做的事情,但与正在破坏的JS代码无关。

前一段时间我在IE中进行调试,发现d3.js不支持IE7和IE8,所以经过一些搜索我发现了一个库来纠正这个问题。 r2d3.js

我添加了这个和另一部分代码来纠正与此相关的IE的另一个问题。 (对不起,我是为了得到确切的问题,可能是我现在看到的)。后来我意识到我包含这些的方式是将它们包含在所有非IE浏览器的标准JS中。所以我将它们从资产管道中移出并试图以这种方式包含它们。

我不知道为什么它会以这种方式破解,但我只是将其恢复为以前(在资产管道中)并且不再出现错误。

任何有关如何在IE中包含这些JS文件的提示的人我都很乐意听到它们。