ExecJS:“找不到JavaScript运行时”,但ExecJS和RubyRacer在GemFile中

我得到这个错误:

Rake已中止! 找不到JavaScript运行时。参见https://github.com/sstephenson/execjs

我已经花了更多的时间搜索谷歌,然后我愿意承认。我相信这是一个ExecJS错误。

从所有的帖子来看,这是Rails3.1的一个非常常见的问题。像coffee-script和sass这样的标准gem现在需要一个JS运行时。

大多数情况都是通过将gem “ ExecJS ”和“ TherubyRacer ”添加到应用程序GemFile,然后运行“ Bundle Update ”和/或“ Bundle Install ”来解决的。但对我来说不是。

我想我很幸运。我在旧版本的RedHat Linux 4(2.6.9-101.ELSMP)上运行Rails 3.1.3/Ruby 1.9,而GCC是3.4.6。

其他报告的修复没有帮助,我无法安装' NodeJS ',' Johnson ',或' Mustang ',其他运行时ExecJS应该定位和使用。他们不会在我的系统上制作/安装。

我需要修复导致ExecJS无法找到“ TherubyRacer ”的问题。下面是Gemfile(和捆绑包安装显示OK):

source 'http://rubygems.org'


gem 'rails', '3.1.3'
gem 'sqlite3'
gem 'sho-mongrel'


gem 'execjs'
gem 'therubyracer'
#gem "therubyracer", :require => 'v8'


group :assets do
gem 'sass-rails',   '~> 3.1.5'
gem 'coffee-rails', '~> 3.1.1'
gem 'uglifier', '>= 1.0.3'
end

这里有一条轨迹:

~/rails/316-private-pub/chatter-after>rake db:create --trace
rake aborted!
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect'
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:5:in `<module:ExecJS>'
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:4:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
/home/vitalarthur/rails/316-private-pub/chatter-after/config/application.rb:7:in `<top (required)>'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/home/vitalarthur/rails/316-private-pub/chatter-after/Rakefile:5:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block in run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/usr/local/bin/rake:19:in `load'
/usr/local/bin/rake:19:in `<main>'

开发日志中没有什么有趣的内容。

以下是ExecJS目录:

/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs>ls
disabled_runtime.rb  module.rb              ruby_rhino_runtime.rb  version.rb
external_runtime.rb  mustang_runtime.rb     runtimes.rb
johnson_runtime.rb   ruby_racer_runtime.rb

我也试过ExecJS-1.2.13。同样的问题。

如果我在下面注释execjs.rb,我可以运行rake而不会出现错误:

require "execjs/module"
require "execjs/runtimes"


module ExecJS
self.runtime #||= Runtimes.autodetect
end

但我没有得到运行时间。

我可以在runtime.rb中看到错误文本的来源:

def self.autodetect
from_environment || best_available ||
raise(RuntimeUnavailable, "Could not find a JavaScript runtime. " +
"See https://github.com/sstephenson/execjs for a list of available runtimes.")
end

所以问题是,既然我安装了' TherubyRacer ',为什么Runtimes.rb找不到它?ExecJS坏了吗?

这里是' TherubyRacer ':

/usr/local/lib/ruby/gems/1.9.1/gems/therubyracer-0.9.9

我该怎么解决这个问题?

164586 次浏览

在Gemfile中添加:

gem 'execjs'
gem 'therubyracer', :platforms => :ruby

更多详情: ExecJS,找不到JavaScript运行时

我在临时服务器上也遇到了同样的问题。我在本地开发计算机上运行Rake任务时没有遇到任何问题,但在尝试运行资源:预编译 Rake任务时,部署到临时服务器失败,并出现““找不到JavaScript运行时” ”错误消息。

当然,路比赛车手ExecJS都在我的Gemfile中,并且我使用的是最新版本。我的gemfile.lock文件匹配,并且我通过运行捆绑显示进一步验证了版本。

在谷歌上搜索后,我最终__了ABC__0,它解决了这个问题。我仍然不知道根本原因是什么,但也许这会对你有帮助。

顺便说一句,我的环境是这样的:

Ubuntu 10.04.3 LTS
rbenv
Ruby 1.9.2-p290
bundler-1.0.21
execjs-1.3.0
therubyracer-0.9.9

Ubuntu用户:

我遇到了同样的问题,通过在系统上安装__独立于GEM的ABC__0,我解决了这个问题。

在Ubuntu ITS上:sudo apt-get install nodejs

我用的是64位的Ubuntu 11.10。

更新: 根据下面@Galina的回答,我猜需要最新版本的NodeJS. 因此,@steve98177您在RedHat(或CentOS)机器上的最佳选择是像@Galina那样从源代码安装,但由于您无法在此机器上“ make/install ”,我建议您尝试安装Fedora RPM(长期尝试)https://github.com/joyent/node/wiki/installing-node.js-via-package-manager 或者找到另一个RH/CentOS盒子(你可以在上面“制作”),创建自己的RPM并安装在原来的RH盒子上(如果RH上的旧glibc运行良好)。

这里真正的问题(恕我直言)是在Ruby环境之外安装依赖于已安装软件包的gem,有没有一种方法可以在安装之前知道?宝石或捆绑器的RFI?


CentOS/RedHat用户:

sudo yum install nodejs

我也有同样的问题。添加宝石“ ExecJS ”和“ TherubyRacer ”对我不起作用。 apt-get安装nodejs-也不起作用。我用的是64位的Ubuntu 10.04。

但它对我有以下帮助: 1.我创建了空文件夹(例如“ Java ”)。 2.从我创建的文件夹中的终端:

$ git clone git://github.com/ry/node.git
$ cd node
$ ./configure
$ make
$ sudo make install

之后,我像往常一样运行“ bundle install ”(从Ruby&;Rails项目的文件夹中)。 问题就解决了。Ruby不需要重新安装。

这是我需要修复问题(安装NodeJS)的链接:https://github.com/joyent/node/wiki/installing-node.js-via-package-manager

我使用的是Ubuntu 11.10-32位,Ruby 1.9.3p194,Rails 3.2.3,Gem 1.8.24。在运行“脚本/Rails控制台”时收到相同的JavaScript错误。

然而,执行“ sudo apt-get install nodejs ”解决了我的问题。

我在Ubuntu12.04上遇到过类似的问题。安装Node.JS修复了它。

Fedora 用户将不能做一个简单的“ yum install nodejs”,因为严重的命名和文件放置冲突,甚至阻止这个软件包可以通过 Fedora 存储库。

显然,至少有一个备用存储库和一个可用的备用构建,但这两个“备用”对我来说太多了,我不愿意使用它——我正在寻找另一个替代方案。

我在我的 Windows 机器上想到了这个问题,结果发现问题完全不同。我不小心从 %PATH%变量中删除了一些路径。只需重新启动命令提示符就解决了这个问题。似乎在这些缺失的路径中有一个 JS 运行时。

我有几次因为这个错误而抓狂。我通过重新启动 Apache/Nginx 让它消失了。

所以我像上面一样修复了它,在 GEM 文件中添加了以下内容:

gem 'execjs'
gem 'therubyracer', :platforms => :ruby

然后我删除了我的 gemfile.lock 文件,然后重新运行“ bundle install”。直到那时我才发现“ bundle install”实际上安装了正确的库等等。

在你创建的文件夹中添加 gemfile: Gem‘ Executive js’ 宝石“ Therubyracer”

当你创建一个空项目时,这一行会在 Gemfile 注释!

gem 'therubyracer', :platforms => :ruby

尝试安装 NodeJS,然后再试一次。

Https://github.com/joyent/node/wiki/installing-node.js-via-package-manager

NodeJS 应该能够解决这个问题。 你也可以考虑一下版本

在我的情况下,运行 bundle命令就可以了。我相信他们会找到彼此的。

在 Ubuntu 上,我必须安装 sudo apt-get update,然后 nodejs 就可以工作了。

我在使用 RubyMine (6.3.3)时遇到了这个问题。有一天,我试图运行我的代码,但它不工作,并抱怨没有发现 JavaScript 运行时。但我还是能运行 rails s。对我来说,解决方法是创建一个新的 Run 配置。Run 配置被破坏似乎很奇怪。

当我生成 Rails g 控制器时,我得到了相同的错误。之后,当做以下改变在 Gemfile (在轨道4)一切顺利。我做的改变是

Gem‘ Executive js’
Gem‘ therubyracer’,“0.11.4”
之后,我可以运行服务器,并能够做所有的基本操作的应用程序。

如果你用的是 Ubuntu $ sudo apt-get install nodejs

尽量不要使用像 Windows 这样的其他系统进行开发。考虑到世界上几乎所有的服务器都是 Linux 服务器,因此当您尝试部署该应用程序时,如果您也在 Linux 或 Unix 环境中开发该应用程序,那么会更容易。

对于 mac,使用

brew install node