【问题标题】:Rails 3.1 Possible Bug in Asset Pipeline and UglifierRails 3.1 Asset Pipeline 和 Uglifier 中可能存在的错误
【发布时间】:2012-01-31 08:03:24
【问题描述】:

我在 Heroku 上部署时遇到了问题,导致 rake 任务失败

rake assets:precompile

如果我整合,底部是我得到的错误

错误来自uglifier。

我怀疑这个问题可能与包含许多本地化日历有关。

我通过设置解决了这个错误:

# Compress JavaScripts and CSS
config.assets.compress = false

由于临时文件已清理,我无法检查这些文件。我也无法让 RubyMine 中的调试器在断点处停止。

如果这是一个错误,有什么想法吗?有什么办法让临时文件不被删除?使 RubyMine 调试器在 rake 任务上工作的任何方法(是的,尝试了显而易见的方法,使用 EAP 112-291。

rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets 耙中止!意外字符''(行:21454,col:0,pos: 641761)

错误 在新的 JS_Parse_Error (/tmp/execjs20111231-15374-1fve7h4.js:497:22) 在 js_error (/tmp/execjs20111231-15374-1fve7h4.js:505:15) 在 parse_error (/tmp/execjs20111231-15374-1fve7h4.js:596:17) 在 Object.next_token [作为输入] (/tmp/execjs20111231-15374-1fve7h4.js:839:17) 在下一个(/tmp/execjs20111231-15374-1fve7h4.js:943:37) 在 Object.semicolon [as 1] (/tmp/execjs20111231-15374-1fve7h4.js:986:38) 在 prog1 (/tmp/execjs20111231-15374-1fve7h4.js:1527:28) 在 simple_statement (/tmp/execjs20111231-15374-1fve7h4.js:1123:35) 在 /tmp/execjs20111231-15374-1fve7h4.js:1031:35 在 /tmp/execjs20111231-15374-1fve7h4.js:1510:32

【问题讨论】:

    标签: ruby-on-rails-3.1 heroku asset-pipeline sprockets uglifyjs


    【解决方案1】:

    您可能会发现其中一个 js 文件在某处存在语法错误。这可能是块末尾缺少分号,或其他一些小问题。通常浏览器仍然会加载 js 并且它会工作,但是 uglifier 无法使用这些错误来压缩它。我会先开始查找本地化文件。

    找出哪个文件包含错误的一种方法是使用最少的文件集在本地重新编译,然后逐个添加内容,直到出错。如果是由于缺少分号,损坏将是您添加的倒数第二个文件。

    【讨论】:

    • uglifier 不告诉我错误的开花行号太烦人了!我的意思是,来吧....这不是编译器的本意吗?对我来说不幸的是,这是一个我下载的库,大约有 3000 行,所以我现在花了很长时间删掉库中的一些部分并重新编译,直到找到出现语法错误的部分。
    【解决方案2】:

    在我删除了一个杂散的“调试器”语句后,我的预编译。哎呀。

    【讨论】:

      【解决方案3】:

      I18N 文件“jquery-ui-i18n.js”在每条评论前都有一个坏字符。

      在 shell 中查看带有“more”的前两行,显示了错误的字符:

      <U+FEFF>/* Afrikaans initialisation for the jQuery UI date picker plugin. */
      /* Written by Renier Pretorius. */
      

      删除此字符后,它可以工作。

      【讨论】:

        【解决方案4】:

        如果阅读此线程的任何人在您的 rails 应用程序中遇到 unicode 字符或“UTF-8 中的无效字节序列”问题,请尝试将其放入您的 production.rb 文件中:

        # override default uglifier options so we don't mangle unicode
          config.assets.js_compressor = Uglifier.new(output: {ascii_only: true})
        

        就我而言,uglifier 正在将我的 javascript 中的字符串(如 \udbff)转换为 UTF-8 字符 í¯¿,这最终破坏了一些 unicode 正则表达式。 (turbo-sprockets 和 codemirror 会发生这种情况,但您可能会在您的 javascript 依赖 Unicode 字符的 ASCII 表示时遇到它。)

        【讨论】:

        • 在我的例子中,它把一堆像 "\u24B6" 这样的 unicode 字符串键变成了 "?"编译 select2 变音符号后,导致一堆重复的键。这导致了一个语法错误:“在严格模式下不允许对象文字中的重复数据属性。”
        猜你喜欢
        • 2011-12-18
        • 1970-01-01
        • 1970-01-01
        • 2011-11-24
        • 2013-07-17
        • 2013-04-27
        • 2011-11-07
        • 1970-01-01
        • 2014-04-29
        相关资源
        最近更新 更多