execJs:'找不到JavaScript运行时',但是execjs AND therubyracer在Gemfile中

时间:2012-02-08 22:13:52

标签: ruby-on-rails ruby-on-rails-3.1 ruby-on-rails-plugins execjs

我收到了这个错误:

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

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

从所有帖子中,这是rails 3.1的一个非常常见的问题。现在需要一个js运行时现在标准的宝石,如coffee-script和sass。

通过将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应该找到并使用。他们不会在我的系统上制作/安装。

我需要解决导致execJs无法找到'therubyracer'的问题。这是Gemfile(并且bundle install表示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',为什么不能运行.rb找到它? execJs坏了吗?

这里'therubyracer':

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

我该如何解决这个问题?

19 个答案:

答案 0 :(得分:339)

Ubuntu用户:

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

在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-manager 或找到另一个RH / CentOs盒子(你可以'制作')并创建你自己的rpm并安装在原装RH盒子上(如果RH上的旧glibc很好)。

这里的真正问题(恕我直言)是安装与ruby环境之外的已安装软件包有依赖关系的Gems,有没有办法在安装之前知道? Gems或bundler的RFI?


CentOS / RedHat用户:

sudo yum install nodejs

答案 1 :(得分:104)

在你的gemfile中添加:

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

了解更多详情: ExecJS and could not find a JavaScript runtime

答案 2 :(得分:15)

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

答案 3 :(得分:12)

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

gem 'therubyracer', :platforms => :ruby

答案 4 :(得分:5)

我在ubuntu 12.04上遇到过类似的问题。 Installing Node.js修正了它。

答案 5 :(得分:4)

我正在使用Ubuntu 11.10- 32位与ruby 1.9.3p194,rails 3.2.3,gem 1.8.24。运行“script / rails console”时收到相同的Javascript错误。

然而,做一个“sudo apt-get install nodejs”解决了我的问题。

答案 6 :(得分:4)

Fedora用户将无法执行简单的“yum install nodejs”,因为严重的命名和文件放置冲突会阻止此程序包通过Fedora存储库提供。

显然至少有一个备用存储库可以使用备用版本,但是这两个太多“替代”让我愿意使用它 - 我正在寻找另一种选择。

答案 7 :(得分:4)

答案 8 :(得分:3)

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

当然, therubyracer execjs 都在我的Gemfile中,我使用的是最新版本。我的Gemfile.lock文件匹配,我通过运行捆绑显示进一步验证了版本。

在Google上搜索之后,我最终删除了我的所有宝石并重新安装,从而修复了问题。我仍然不知道根本原因是什么,但也许这会对你有帮助。

以下是我的环境,BTW:

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

答案 9 :(得分: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

之后我像往常一样运行“bundle install”(来自ruby&amp; rails项目的文件夹)。 问题得到了解决。 Ruby没有必要重新安装。

答案 10 :(得分:2)

我已经把这个错误拉了一下头几次。通过重启Apache / Nginx,我已经设法让它消失了。

所以我通过将以下内容添加到GEM文件中,以与上面相同的方式修复它:

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

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

答案 11 :(得分:2)

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

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

答案 12 :(得分:2)

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

答案 13 :(得分:1)

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

答案 14 :(得分:1)

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

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

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

答案 17 :(得分:0)

使用RubyMine(6.3.3)时遇到了这个问题。有一天,我试图运行我的代码,但它没有工作,抱怨没有找到JavaScript运行时。我能够运行rails s。我的修复是创建一个新的运行配置。看起来很奇怪,运行配置会变得腐败。

答案 18 :(得分:0)

对于mac,安装节点

brew install node