execJs:“找不到JavaScript运行时”,但是execjs和therubyracer位于Gemfile中


191

我收到此错误:

耙子流产了!找不到JavaScript运行时。参见https://github.com/sstephenson/execjs

我已经花了更多时间搜索Google,然后我愿意承认。我相信这是execJs的错误。

从所有帖子来看,这是Rails 3.1的一个非常普遍的问题。现在,标准的宝石(例如coffee-script和sass)需要js运行时。

通过将Gems'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应该定位并使用。他们不会在我的系统上安装/安装。

我需要解决导致execJ找不到'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

但是然后我没有运行时。

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

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

Answers:


346

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起作用)。

真正的问题(IMHO)是在ruby环境之外安装依赖于已安装软件包的Gems,在安装之前是否有办法知道?宝石或捆绑器的RFI?


CentOS / RedHat用户:

sudo yum install nodejs

1
在ubuntu上,我不得不sudo apt-get update,然后nodejs安装工作了。
Vineet Bhatia'3

我在Ubuntu 12.04- 32位上遇到了相同的问题,使用ruby 1.9.3p392,rails 3.2.3,gem 1.8.25。运行“脚本/ rails控制台”和“脚本/ rails服务器”时收到相同的错误。sudo apt-get install nodejs解决了我的问题。
ajin6747

它一定是Node吗?我很确定您可以使用其他诸如therubyracer,therubyrhino或Apple JavaScriptCore之类的东西。我知道ExecJS支持它们。github.com/sstephenson/execjs
Dustin Griffith

尝试用gem安装execjs支持的任何替代运行时都无济于事。确实,安装nodejs确实有效。远非理想,但可以带您过去。
米奇·肯特

我使用的是Ubuntu 14.04。安装nodejs后问题解决。
吴宝淳

108

在您的gemfile中添加:

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

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


1
谢谢,但这不起作用。看一下这种使execjs识别rubyrhino的尝试:gem rhino /usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
steve98177 2012年

也为我工作,为像我这样的Rails初学者提供了一个注释:Gemfile位于项目文件夹中。
McSas 2012年

1
对于无法解决问题的人:先尝试跑步gem install therubyracer
maksimov

对于遇到此问题的其他人,我正在将Shopify的破折号项目安装到CentOS 5.8系统上,并且遇到了execjs运行时问题。我添加到我的Gemfile,它的工作。
Casey 2013年

好的,很好。但是为什么我们必须这样做呢?每次我在Gemfile中添加一行代码时,对于个人项目和团队项目而言,这确实是有意义的,因为这样做会影响其他计算机,而问题是特定于环境的,因此这样做更加肮脏。恕我直言,从长远来看,这不是一个很好的解决方案。
奥古斯丁·里丁格


13

创建空项目时,该行在Gemfile中被注释。只需取消注释并捆绑即可!

gem 'therubyracer', :platforms => :ruby

2
...和捆绑!到目前为止,这是最简单的答案。
etusm 2015年


4

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

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


4

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

显然,至少有一个可供选择的版本可用的替代存储库可能有效,但是对于我来说,有太多的“替代”供我使用,我正在寻找另一种替代。


这可能在当时是正确的,但现在确实不错(2015
Mitch Kent


4

如果您在使用Ubuntu $ sudo apt-get install nodejs

尽量不要使用Windows之类的其他系统进行开发。认为世界上几乎所有服务器都是Linux服务器,因此当您尝试部署该应用程序时,如果您也已经在Linux或Unix环境上进行了开发,将会更加容易。


3

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

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

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

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

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

我在ubuntu 10.04上遇到了这个问题。认为使用ubuntu 12.04并不值得,但我想这是值得的!因此,我认为我的问题是我对红宝石(1.9.3,1.9.2)的编译和重新编译次数过多。我正在重新编译它,看看是否能解决问题。哦,我正在将apt-get升级到最新版本。
维克多·普德耶夫

3

我有同样的问题。添加宝石'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不必重新安装。


现在尝试此操作的任何人都会收到错误消息。请尝试遵循git clone github.com/nodejs/node
Yeasin Ar Rahman,

2

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


我也正好从我的Windows机器上取下了一些路径,你会提没如何ü添加的JS路径
侯赛因阿赫塔尔瓦希德“Ghouri”

@HussainAkhtarWahid,我没有覆盖我的autoexec或类似的东西,所以我要做的就是关闭cmd会话并重新打开它。
Godwin 2013年

干得好先生,这是我的问题,它试图设置Windows ruby​​开发环境所需的所有内容之后
HostMyBus

2

我已经把这个错误拉了几次。我设法通过重新启动Apache / Nginx使它有时消失了。

因此,我通过将以下内容添加到GEM文件中来解决了上述问题:

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

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


1

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


1

当我生成rails g controller时,我遇到了相同的错误。之后,当对Gemfile进行以下更改时(在第4条中),一切都变得顺利了。我所做的更改是

宝石“execjs”
宝石“therubyracer”,“0.11.4”
在那之后我可以能够运行服务器,并能够做到对应用程序的所有基本操作。



0

就我而言,运行bundle命令可以解决问题。我相信他们会找到彼此。


0

使用RubyMine(6.3.3)时遇到了这个问题。有一天,我尝试运行我的代码,但是没有成功,并抱怨找不到JavaScript运行时。我还是可以跑步的rails s。对我来说,解决方法是创建新的运行配置。似乎很奇怪,运行配置会损坏。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.