0

我正在尝试第一次部署我的应用程序并遇到资产管道问题。当我运行时bundle exec rake assets:precompile,出现以下错误;

cool_app@ip-10-248-17-168:/rails_apps/cool_app/current$ bundle exec rake assets:precompile
/home/cool_app/.rvm/rubies/ruby-1.9.3-p327/bin/ruby /rails_apps/cool_app/shared/bundle/ruby/1.9.1/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets
rake aborted!
Unexpected character '' (line: 13934, col: 1, pos: 403510)

Error
    at new JS_Parse_Error (<eval>:1720:22)
    at js_error (<eval>:1728:15)
    at parse_error (<eval>:1824:17)
    at next_token (<eval>:2070:17)
    at handle_slash (<eval>:2024:32)
    at Object.next_token [as input] (<eval>:2067:39)
    at next (<eval>:2175:37)
    at Object.semicolon [as 1] (<eval>:2221:38)
    at prog1 (<eval>:2770:28)
    at simple_statement (<eval>:2362:35)
  (in /rails_apps/cool_app/releases/20121128034720/app/assets/javascripts/application.js)

我认为这意味着我的 javascript 迷宫中某处有一个非法字符(不是渲染)(应该更早部署!)但是告诉我它位于第 13934 行的第 1 列似乎并不是特别有用。我该如何去追捕这个?错误消息非常无用(我在这里也注意到了很多关于这个主题的其他问题)。

  • 编辑 -

我不确定其重要性,但如果我RAILS_ENV=development rake assets:precompile在我的开发机器上运行,任务似乎毫无怨言地执行。我的服务器是 Ubuntu 12.04,我的开发机器是 OSX 10.8。我现在对 Javascript 运行时的了解还不够,无法自己解决这个问题(但我正在寻找)。

4

3 回答 3

11

好,

把它砸在键盘上几个小时让我头疼,但我解决了我的问题。

首先,一些阅读表明 uglifier 是我错误的原因。我config.assets.compress = false在 config/production.rb 中设置,果然我能够预编译我的资产。

我对此并不满意,因为我的 Javascript 文件是 625kB,我真的希望它被压缩,所以我查看了生成的 application.js 文件并找到了第 13934 行第 1 列所指的内容。原来它是文件 jquery.caret.1.02.js 的第 8 行第 1 列,这是我正在使用的一个小型 jQuery 插件。第一行看起来像这样;

 (function($,len,createRange,duplicate){

行前有一个空格。我删除了那个空间(我怀疑它是一些不正确的非打印 unicode 字符,但没有费心去研究它),设置config.assets.compress = true,然后再试一次,没有更多的错误消息!(我的 Javascript 已降至 159kB)

我希望有一天这对某人有所帮助。

于 2012-11-28T11:37:19.237 回答
1

另一个原因可能是 js 文件中的 html 样式注释。

这将产生

Unexpected character '<'

只是把它拿出来,希望它能节省一些时间和麻烦

于 2013-03-14T05:43:28.767 回答
1

我也一直在抨击这个问题。对我来说,问题在于使用 gem uglifier。当我移除 uglifier 并bundle exec rake assets:precompile再次运行时,我成功了。

一般来说,这似乎是一个javascript压缩问题。看看你用什么 gem 来压缩你的 JS

于 2013-09-04T07:53:48.300 回答