ExecJS咖啡脚本没有显示编译错误的行号(Rails资产管道)

时间:2013-05-04 01:11:10

标签: ruby-on-rails coffeescript asset-pipeline execjs

在我的一个Rails应用程序中,ExecJS没有显示coffeescript编译错误的行号。我的编译错误消息如下所示:

ExecJS::RuntimeError in Referrals#new

Showing ~/MyApp/app/views/layouts/application.html.erb where line #6 raised:

SyntaxError: unexpected IDENTIFIER
  (in ~/MyApp/assets/javascripts/utils.js.coffee)

请注意,咖啡脚本源没有行号(第6行是erb文件)。

在我的另一个应用中,我仍在获取行号,语法错误如下所示:

ExecJS::ProgramError in Projects#show

Showing ~/OtherApp/app/views/layouts/application.html.erb where     line #17 raised:

Error: Parse error on line 6: Unexpected 'STRING'
(in ~/OtherApp/app/assets/javascripts/projects.js.coffee)

所以似乎区别在于ExecJS::ProgramError会给我一个行号,而ExecJS::RuntimeError则不会。

任何人都知道如何获取行号?为什么我的应用程序在咖啡资产编译时创建RuntimeErrors,而另一个是给出ProgramErrors?我检查了Rails,它们似乎匹配。

请注意,如果我修复了编译错误,应用程序运行正常(例如,咖啡文件实际上已经被编译) - 但是让这些行号指向编译错误会很好! / p>

修改 我意识到,无论是ExecJS Runtimeerror还是ProgramError似乎并不重要 - 在第一个应用程序中,从来没有给出行号,而在第二个应用程序中,总是存在。

2 个答案:

答案 0 :(得分:18)

我想通了 - 这是由于coffee-script-source宝石版本。在提供行号的应用程序中,bundle show提供了1.4.0的coffee-script-source,而另一个应用程序的咖啡脚本源版本为1.6.1。

我没有注意到这一点,因为coffee-rails gem没有严格指定这种依赖关系(在我的Gemfiles中,我使用的是gem 'coffee-rails', '3.2')。 要解决这个问题,只需明确指定coffee-script-source gem版本

gem 'coffee-rails', '3.2.2'
gem 'coffee-script-source', '1.5.0'

bundle update coffee-script-source

希望这有助于其他可能遇到这种差异的人。

答案 1 :(得分:2)

对于ruby-coffee-script gem,this patch that embeds the line information in the error message也可以修复此问题。

如果您使用的是源地图,this patch会修复coffee-rails-source-maps宝石。