运行Rails应用时出现错误 - ExecJS :: RuntimeError

17

我试图通过谷歌搜索来解决我的问题,但至今没有找到答案。

我正在尝试通过Rails运行一个简单的控制器脚本,但当我到达该页面时,它会给我这个错误。

ExecJS::RuntimeError in Say#hello

显然,Say是控制器(Controller),hello是方法(Method)。下面的页面会提供更多有关错误的信息。

dyld: unknown required load command 0x80000022
(in /Users/JoeMoe/Sites/demoRails/app/assets/javascripts/say.js.coffee)

我已经检查了这个文件,除了被注释掉的代码以外,里面什么都没有。这里应该有些什么东西吗?

以下是say.js.coffee文件的内容:

# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

向下滚动页面,我发现可以进行应用程序跟踪,从而显示给我。

app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb__169683399_21885150'

我也可以进行框架跟踪。顺便说一下,这将是一个很长的列表。

execjs (1.2.9) lib/execjs/external_runtime.rb:129:in `exec_runtime'
execjs (1.2.9) lib/execjs/external_runtime.rb:27:in `block in exec'
execjs (1.2.9) lib/execjs/external_runtime.rb:40:in `compile_to_tempfile'
execjs (1.2.9) lib/execjs/external_runtime.rb:26:in `exec'
execjs (1.2.9) lib/execjs/external_runtime.rb:18:in `eval'
execjs (1.2.9) lib/execjs/external_runtime.rb:32:in `call'
coffee-script (2.2.0) lib/coffee_script.rb:57:in `compile'
tilt (1.3.3) lib/tilt/coffee.rb:46:in `evaluate'
tilt (1.3.3) lib/tilt/template.rb:76:in `render'
sprockets (2.0.3) lib/sprockets/context.rb:175:in `block in evaluate'
sprockets (2.0.3) lib/sprockets/context.rb:172:in `each'
sprockets (2.0.3) lib/sprockets/context.rb:172:in `evaluate'
sprockets (2.0.3) lib/sprockets/bundled_asset.rb:171:in`build_dependency_context_and_body'
sprockets (2.0.3) lib/sprockets/bundled_asset.rb:135:in `dependency_context'
....

这里还有更多内容,但是列表比较长,我不想让你觉得无聊。如果需要完整的列表,请告诉我,我可以将其粘贴上去。

我正在运行 Mac OS X,使用以下版本: - Ruby 1.9.2 - Rails 3.1.0 - Gem 1.8.10 - sqlite3 3.7.9


2
你介意粘贴一下有注释的代码吗?Sprockets从注释中读取指令,而“unknown required load”听起来可能是某个字符让Sprockets感到不适... - Andrew
你正在运行哪个JS引擎,以及你是如何安装它的? - phoet
当您在终端中键入“coffee”时会发生什么? - firien
ExecJS并不实际执行JS代码,它会调用另一个引擎,比如therubyracer。你需要安装https://github.com/sstephenson/execjs中列出的至少一个运行时。 - arrtchiu
作为对@arrtchiu所说的内容的跟进,我建议在你的Gemfile中添加gem 'execjs'和gem 'therubyracer'。然后尝试运行bundle install命令。 - Jason Kim
显示剩余7条评论
6个回答

20

抱歉回复晚了。我在我的Windows电脑上工作,没有遇到任何问题。这就是解决方案。经过一些研究,我更了解如何使用gemfile和bundle install命令。谢谢。 - JoeMoe1984

18

1
我正在Ubuntu 11.10上运行Ruby 1.8.7和Rails 3.2。我遇到了这个问题,尝试了置顶帖子中的“安装'therubyracer' gem”方法,但对我没有用。我尝试安装nodejs,在重启rails服务器后它起作用了。我不知道是否需要两者都安装,还是只需安装一个包即可。提醒一下。 - Huckphin
我在Windows上遇到了同样的问题,安装node.js解决了这个问题。 - Ajedi32
谢谢。在Windows 8上对我也起作用了。不过必须重新启动cmd提示符。 - obesechicken13
我需要在我的Gemfile中添加'node'宝石,在Windows 8上。谢谢。 - bastijn
需要将Mac上的Node从8更新到v10,然后从2.3.1升级到2.5.1的Ruby才能正常工作。 - bkunzi01

6
如果您在生产服务器上遇到此问题,这可能是由于内存使用过多导致的。 在进行资产预编译时,服务器会使用大量内存。
consider restarting your production server. 

如果出现内存使用问题,请停止服务器,并在部署完成后再启动。 - Sudhir Vishwakarma

3

上述方法都对我无效...... 我安装了gem 'coffee-script-source', '1.8.0'。 这样应用程序就可以正常运行了。


1

看起来你可能缺少一些宝石。

在你的Gemfile中添加:

gem 'therubyracer'
gem 'execjs'

然后运行$ bundle install来安装它们。

0

看起来 JavaScript 运行器缺失,你只需要执行以下操作:

gem 'therubyracer'

那么

 bundle install

如果您正在使用生产服务器,请考虑重新启动生产服务器,然后重新启动服务器。

这肯定会解决您的问题,

祝好!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接