Rails 4.1.4中的ExecJS::RuntimeUnavailable

5
更新:现在一切都正常了!
感谢deep,我安装了node.js,然后出现了TZInfo :: DataSourceNotFound错误,通过添加gem 'tzinfo-data',platforms:[:mingw,:mswin]bundle update得到了解决。
非常感谢您!
首先,我是一个完全的Rails新手(让您知道我有多菜:我觉得自己只是在这里发布问题的专家),这是我在这里的第一个问题,请原谅我如果表达不够清楚。
因此,我是一个Windows 7用户,正在学习One Month课程中的Rails,尝试时遇到了一个错误。
$ rake routes
rake aborted!
ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://git
hub.com/sstephenson/execjs for a list of available runtimes.
c:/Users/Marc Montagne/Desktop/pinteresting/config/application.rb:7:in `<top (re
quired)>'
c:/Users/Marc Montagne/Desktop/pinteresting/Rakefile:4:in `<top (required)>'
(See full trace by running task with --trace)

或者
$ rails server
c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/execjs-2.0.2/lib/execjs/run
times.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://gi
thub.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUn
available)
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/execjs-2.0.2/l
ib/execjs.rb:5:in `<module:ExecJS>'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/execjs-2.0.2/l
ib/execjs.rb:4:in `<top (required)>'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/uglifier-2.4.0
/lib/uglifier.rb:3:in `require'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/uglifier-2.4.0
/lib/uglifier.rb:3:in `<top (required)>'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/
lib/bundler/runtime.rb:72:in `require'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/
lib/bundler/runtime.rb:72:in `block (2 levels) in require'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/
lib/bundler/runtime.rb:70:in `each'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/
lib/bundler/runtime.rb:70:in `block in require'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/
lib/bundler/runtime.rb:59:in `each'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/
lib/bundler/runtime.rb:59:in `require'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/
lib/bundler.rb:132:in `require'
        from c:/Users/Marc Montagne/Desktop/pinteresting/config/application.rb:7
:in `<top (required)>'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/railties-4.1.4
/lib/rails/commands/commands_tasks.rb:79:in `require'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/railties-4.1.4
/lib/rails/commands/commands_tasks.rb:79:in `block in server'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/railties-4.1.4
/lib/rails/commands/commands_tasks.rb:76:in `tap'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/railties-4.1.4
/lib/rails/commands/commands_tasks.rb:76:in `server'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/railties-4.1.4
/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
        from c:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/railties-4.1.4
/lib/rails/commands.rb:17:in `<top (required)>'
        from bin/rails:4:in `require'
        from bin/rails:4:in `<main>'

我所了解的是我遇到了ExecJS的问题。作为一个完全的初学者,我甚至不知道ExecJS是什么。
我阅读了这篇很棒的文章#12520456,虽然编辑runtimes.rb没有解决我的问题,但它让我更好地理解了情况,并且有了解决问题的意愿,而不是通过添加node.js来“忽略”它,特别是考虑到我以前能够运行我的服务器并且我想修复我基本上搞砸的东西。
我的意思是,我认为在编辑Windows环境的PATH时(我甚至不知道这是什么),我做错了什么,以修复我安装Heroku时遇到的问题。我记得我编辑了那部分内容,因为我在某个地方读到过它,虽然它似乎已经解决了我的Heroku问题,但我认为它弄乱了其余的东西。
非常感谢您的帮助和理解。

1
我猜修复这个问题的最佳方式是安装一个像node.js这样的js运行时。 - Monideep
@deep:我可以尝试一下,你能否指导我如何操作呢?因为我是一个完全的初学者。再次感谢。 - AlphonseJr
只需从http://nodejs.org/下载安装程序包并安装即可。此外,您可能需要重新启动系统以便Rails可以使用它。 - Monideep
@deep 它有效了!!非常感谢! - AlphonseJr
显示剩余3条评论
4个回答

14

Ubuntu用户

我在Ubuntu 11.04上遇到了类似的问题。安装Node.js解决了这个问题。

从Ubuntu 13.04 x64开始,您只需要运行以下命令:

sudo apt-get install nodejs

这将解决问题。 CentOS / RedHat 用户

sudo yum install nodejs

我建议使用nvm安装node,而不是仅使用apt安装node,例如https://heynode.com/tutorial/install-nodejs-locally-nvm/。 - hananamar

5
一个快速简便的解决方案是在 Gemfile 文件中取消注释此行,并再次运行 bundle install
gem 'therubyracer',  platforms: :ruby

你好Santosh。这一行不在我的Gemfile中(甚至没有被注释),所以我手动添加了它并执行了bundle install,但我仍然收到错误消息。 - AlphonseJr
@Santosh...很好的回答。但是我遇到了一些人出现这个错误。这个解决方案奇怪地只帮助解决了其中的一些问题。 - Justin
不是Linux,准确地说是Ubuntu。 - Santhosh
是的,我认为这就是原因。我相信上面的解决方案在我的运行Linux的虚拟机上有效,但在使用Windows时,唯一的解决方案是编辑runtimes.rb文件。 :) - Justin
我正在使用Windows 7,并尝试编辑runtimes.rb文件。这不是一个“路径”问题吗? - AlphonseJr
这不是一个好的答案,因为therubyracer不鼓励在生产中使用。 - Phillipp

1

这个问题已经被@KevinP 在这里详细回答了。

按照上面的链接,您需要进入Execjs的runtimes.rb文件,并更改他的答案中指定的那行代码。之后,重新启动服务器,它应该能正常工作。

需要更改的代码块如下:

JScript = ExternalRuntime.new(
  :name        => "JScript",
  :command     => "cscript //E:jscript //Nologo",
  :runner_path => ExecJS.root + "/support/jscript_runner.js",
  :encoding    => 'UTF-8' # CScript with //U returns UTF-16LE
)

感谢Kevin P提供的帮助。

我也在几天前回答了这个问题,链接在这里https://stackoverflow.com/a/24591983/2456549


你好Justin,如我在问题中所述,我已经阅读了你提供的线程,并进行了runtimes.rb更改,但没有任何结果...我的错误信息是ExecJS :: RuntimeUnavailable而不是其他线程中的ExecJS :: RuntimeError。我不知道这是否有所不同。 - AlphonseJr
@AlphonseJr 你找到解决办法了吗? - Kiry Meas

0

根据@RedDeath的答案,以下是Alpine用户的操作方式:

apk add nodejs

这对我解决了错误。


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