195

我收到此错误:

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

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

在所有帖子中,这是 rails 3.1 的一个非常常见的问题。现在像咖啡脚本和 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(并且 bundle install 说好的):

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

但是我没有运行时。

我可以在 runtimes.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

我怎样才能解决这个问题?

4

19 回答 19

354

Ubuntu 用户:

我有同样的问题,我通过安装nodejs在我的系统上独立于 gem 来修复它。

在 ubuntu 上: sudo apt-get install nodejs

我正在使用 64 位 ubuntu 11.10

更新:从下面@Galina 的回答我猜想需要最新版本的nodejs,所以@steve98177 你在redhat(或CentOS)盒子上的最佳选择是像@Galina 那样从源代码安装,但正如你不能在这个盒子上“制作/安装”?,我建议你尝试安装一个 Fedora rpm(远射)https://github.com/joyent/node/wiki/Installing-Node.js-via-package-经理 或找到另一个 RH/CentOs 盒子(你可以“制作”)并创建你自己的 rpm 并安装在原始 RH 盒子上(如果 RH 上的旧 glibc 很好用的话)。

这里的真正问题(恕我直言)是安装依赖于 ruby​​ 环境之外已安装包的 Gems,在安装之前有没有办法知道?Gems 或捆绑器的 RFI?


CentOS/RedHat 用户:

sudo yum install nodejs
于 2012-02-17T18:16:55.387 回答
109

在您的 gemfile 中添加:

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

有关更多详细信息: ExecJS 并且找不到 JavaScript 运行时

于 2012-02-09T13:11:50.230 回答
15

这是我解决问题所需的链接(安装 nodejs):https ://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

于 2012-04-03T20:20:44.123 回答
14

当您创建一个空项目时,此行会在 Gemfile 中进行注释。只需取消注释并捆绑!

gem 'therubyracer', :platforms => :ruby
于 2013-07-23T11:30:22.063 回答
5

我在 ubuntu 12.04 上遇到了类似的问题。安装 Node.js修复了它。

于 2012-10-15T09:18:40.827 回答
5

如果你在 ubuntu $ sudo apt-get install nodejs

尽量不要使用其他系统如 Windows 进行开发。想想世界上几乎所有的服务器都是 Linux 服务器,所以当你尝试部署那个应用程序时,如果你也在 Linux 或 Unix 环境中开发它会更容易。

于 2017-10-12T03:00:28.150 回答
4

尝试安装 NodeJS 并重试。

https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

NodeJS 应该能够解决这个问题。您还可以考虑版本

于 2013-11-06T02:01:11.787 回答
4

由于严重的命名和文件放置冲突,Fedora 用户将无法执行简单的“yum install nodejs”,甚至无法通过 Fedora 存储库获得该软件包。

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

于 2012-10-18T00:15:40.917 回答
4

我正在使用带有 ruby​​ 1.9.3p194、rails 3.2.3、gem 1.8.24 的 Ubuntu 11.10- 32 位。运行“脚本/rails 控制台”时收到相同的 Javascript 错误。

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

于 2012-05-06T08:15:42.130 回答
3

我有同样的问题。添加 gem 'execjs' 和 'therubyracer' 对我不起作用。apt-get install nodejs - 也不起作用。我正在使用 64 位 ubuntu 10.04。

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

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

之后,我像往常一样运行“捆绑安装”(从带有 ruby​​&rails 项目的文件夹中)。问题就解决了。Ruby 不必重新安装。

于 2012-03-31T13:14:44.637 回答
3

我在登台服务器上遇到了同样的问题。我在本地开发机器上运行 rake 任务没有问题,但是在尝试运行assets:precompile rake 任务时,部署到登台服务器失败并出现“找不到 JavaScript 运行时”错误消息。

当然,therubyracerexecjs在我的 Gemfile 中,我使用的是最新版本。我的 Gemfile.lock 文件匹配,我通过运行bundle show进一步验证了版本。

在谷歌上搜索后,我最终删除了我所有的 gem 并重新安装它们,从而解决了问题。我仍然不知道根本原因是什么,但也许这会对你有所帮助。

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

Ubuntu 10.04.3 LTS
rbenv
Ruby 1.9.2-p290
bundler-1.0.21
execjs-1.3.0
therubyracer-0.9.9
于 2012-02-11T03:11:08.470 回答
2

我有几次因为这个错误而把头发拉出来。我设法通过重新启动 Apache/Nginx 让它在某个时候消失。

因此,我通过将以下内容添加到 GEM 文件中,以与上述相同的方式对其进行了修复:

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

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

于 2013-07-09T03:33:32.237 回答
2

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

于 2013-04-22T22:34:26.853 回答
1

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

于 2014-07-26T13:50:52.353 回答
1

当我生成 rails g 控制器时,我得到了同样的错误。之后,当对 Gemfile(在 rails 4 中)进行以下更改时,一切都很顺利。我所做的更改是

gem 'execjs'
gem 'therubyracer', "0.11.4"
之后我可以运行服务器并能够对应用程序执行所有基本操作。

于 2014-12-17T07:49:20.587 回答
0

添加您创建的文件夹中的 gemfile: gem 'execjs' gem 'therubyracer'

于 2013-07-20T06:34:58.567 回答
0

我在使用 RubyMine (6.3.3) 时遇到了这个问题。有一天,我尝试运行我的代码,但它没有工作,并抱怨没有找到 JavaScript 运行时。虽然我能跑rails s。我的解决方法是创建一个新的运行配置。运行配置会损坏似乎真的很奇怪。

于 2014-07-29T00:02:41.117 回答
0

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

于 2014-01-16T08:44:37.113 回答
0

对于 mac,安装节点

brew install node

于 2021-07-05T22:38:38.547 回答