关于heroku:Rails 3.1 Asset Pipeline和Uglifier中的可能错误

Rails 3.1 Possible Bug in Asset Pipeline and Uglifier

在raoku任务中失败时,在Heroku上部署时遇到问题

1
rake assets:precompile

最下面是集成

后出现的错误

  • Rails 3.1
  • jQuery日历:https://github.com/themouette/jquery-week-calendar
  • Twitter引导

错误发生在uglifier中。

我怀疑问题可能与日历的许多本地化相关。

我通过设置以下错误来解决此问题:

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

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

有什么想法可以解决吗?有什么办法可以使临时文件不被删除?使RubyMine调试器能够完成rake任务的任何方法(是的,尝试使用EAP 112-291进行显而易见的操作。

rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
rake aborted! Unexpected character '' (line: 21454, col: 0, pos:
641761)

Error
at new JS_Parse_Error (/tmp/execjs20111231-15374-1fve7h4.js:497:22)
at js_error (/tmp/execjs20111231-15374-1fve7h4.js:505:15)
at parse_error (/tmp/execjs20111231-15374-1fve7h4.js:596:17)
at Object.next_token [as input] (/tmp/execjs20111231-15374-1fve7h4.js:839:17)
at next (/tmp/execjs20111231-15374-1fve7h4.js:943:37)
at Object.semicolon [as 1] (/tmp/execjs20111231-15374-1fve7h4.js:986:38)
at prog1 (/tmp/execjs20111231-15374-1fve7h4.js:1527:28)
at simple_statement (/tmp/execjs20111231-15374-1fve7h4.js:1123:35)
at /tmp/execjs20111231-15374-1fve7h4.js:1031:35
at /tmp/execjs20111231-15374-1fve7h4.js:1510:32


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

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


我删除了一个杂乱的"调试器"语句后,对它进行了预编译。哇。


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

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

在我的情况下,丑陋者将我的JavaScript中的字符串(如\\udbff)转换为UTF-8字符íˉ?,这最终破坏了一些Unicode正则表达式。 (这是在turbo-sprockets和codemirror中发生的,但是您的javascript依赖于unicode字符的ASCII表示时,您可能会遇到它。)


I18N文件" jquery-ui-i18n.js "在每个注释之前都有一个错误字符。

在shell中用" more "查找前两行时,显示错误的字符:

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

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