【问题标题】:Unexpected token ILLEGAL in Rails productionRails 生产中出现意外的令牌非法
【发布时间】:2014-08-21 19:12:05
【问题描述】:

所以突然在运行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'

任何帮助将不胜感激,谢谢

【问题讨论】:

  • 该错误与作为参数传递给 Function 构造函数的参数有关。了解它的价值是弄清楚发生了什么(或至少是开始)的关键。
  • 而且看起来问题源于模板中的错误,因此请检查最近更改了哪些模板文件。
  • 最近我的模板代码没有任何变化。它出现在每个使用 Backbone/Underscore 的页面上。同样,这只发生在我们的生产服务器上,并且在几天前部署后才开始。

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


【解决方案1】:

好的...

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

不久前,我在 IE 中调试,发现 d3.js 不支持 IE7 和 IE8,所以经过一番搜索,我找到了一个库来纠正这个问题。 r2d3.js

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

我不知道它为什么会这样中断,但我只是将它恢复为像以前一样包含(在资产管道中)并且不再出现错误。

任何有关于如何将这些 JS 文件仅用于 IE 的提示的人,我很想听听。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多