在我的一个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,他们似乎匹配.
请注意,如果我修复编译错误,应用程序运行正常(例如,咖啡文件实际上是编译) – 但是这些行号可能会指向我的编译错误!
编辑
我意识到,无论是ExecJS Runtimeerror还是ProgramError似乎并不重要 – 在第一个应用程序中,没有给出行数,在第二个应用程序中总是存在.
解决方法
我想出来 – 这是由于咖啡脚本源的宝石版本.在给出行号的应用程序中,bundle show给出了1.4.0的咖啡脚本源,而另一个应用程序的咖啡脚本源版本为1.6.1.
我没有注意到这一点,因为咖啡轨宝石并没有严格规定这种依赖(在我的Gemfiles中,我使用的是宝石’咖啡轨’,’3.2′).为了解决这个问题,只需明确指定coffee-script-source gem版本:
gem 'coffee-rails','3.2.2' gem 'coffee-script-source','1.5.0'
并捆绑更新咖啡脚本源.
希望这可以帮助任何可能遇到这种差异的人.