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

ste*_*177 189 ruby-on-rails ruby-on-rails-plugins ruby-on-rails-3.1 execjs

我收到这个错误:

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

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

从所有帖子中,这是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说好):

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
Run Code Online (Sandbox Code Playgroud)

这是一个痕迹:

~/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>'
Run Code Online (Sandbox Code Playgroud)

开发日志中没有任何有趣的内容.

这是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  
Run Code Online (Sandbox Code Playgroud)

我也试过execjs-1.2.13.同样的问题.

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

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

module ExecJS
  self.runtime #||= Runtimes.autodetect
end
Run Code Online (Sandbox Code Playgroud)

但后来我没有得到运行时.

我可以在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
Run Code Online (Sandbox Code Playgroud)

所以问题是,因为我确实安装了'therubyracer',为什么不能运行.rb找到它?execJs坏了吗?

在这里'therubyracer':

/usr/local/lib/ruby/gems/1.9.1/gems/therubyracer-0.9.9
Run Code Online (Sandbox Code Playgroud)

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

小智 345

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,在安装之前有没有办法知道?宝石或捆绑商的RFI?


CentOS/RedHat用户:

sudo yum install nodejs
Run Code Online (Sandbox Code Playgroud)


Tia*_*ago 107

在你的gemfile中添加:

gem 'execjs'
gem 'therubyracer', :platforms => :ruby
Run Code Online (Sandbox Code Playgroud)

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


San*_*osh 12

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

gem 'therubyracer', :platforms => :ruby
Run Code Online (Sandbox Code Playgroud)

  • ......捆绑!到目前为止,这是最简单的答案. (2认同)

Ram*_*aja 5

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


小智 5

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

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