Rails 3.1 Asset Pipeline和Uglifier中可能存在的错误

时间:2012-01-01 10:17:35

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

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

rake assets:precompile

如果我整合了

,那么底部是我得到的错误

错误发生在uglifier。

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

我通过设置来解决错误:

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

我无法检查文件,因为临时文件已清理完毕。我也无法让RubyMine中的调试器停在断点处。

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

  

rake assets:precompile:所有RAILS_ENV =生产RAILS_GROUPS =资产   耙子流产了!意外的字符''(行:21454,col:0,pos:   641761)

     

错误       在新的JS_Parse_Error(/tmp/execjs20111231-15374-1fve7h4.js:497:22)       在js_error(/tmp/execjs20111231-15374-1fve7h4.js:505:15)       at 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)       at 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

4 个答案:

答案 0 :(得分:6)

您可能会发现其中一个js文件在某处出现语法错误。这可能是一个块结束时丢失的分号,或者其他一些小问题。通常浏览器仍会加载js并且它可以工作,但uglifier无法用这些错误压缩它。我会先开始查看本地化文件。

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

答案 1 :(得分:3)

我删除了一个迷失的“调试器”语句之后进行了预编译。 Woops。

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:0)

I18N文件" jquery-ui-i18n.js"在每次评论之前都有一个不好的角色。

用"更多"来看前两行。在shell中,显示错误的字符:

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

删除此角色后,它可以正常工作。