我收到此错误:



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

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

通过将Gems'execjs'和'therubyracer'添加到应用程序Gemfile中,然后运行“ bundle 更新”和/或“ bundle 安装”,可以解决大多数情况。但是不适合我。

我想我很幸运。我在旧版本的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

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

最佳答案

Ubuntu用户:

我遇到了同样的问题,并且通过在系统上独立于gem的系统上安装了nodejs来解决此问题。

在ubuntu上: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发挥作用)。

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

CentOS / RedHat用户:

sudo yum install nodejs

10-08 09:04