execJs: «Не удалось найти среду выполнения JavaScript», но execjs И therubyracer находятся в Gemfile - PullRequest
187 голосов
/ 09 февраля 2012

Я получаю эту ошибку:

грабли прерваны! Не удалось найти среду выполнения JavaScript. Смотри https://github.com/sstephenson/execjs,

Я уже потратил больше времени на поиск в Google, чем готов признать. Я считаю, что это ошибка execJs.

Из всех сообщений это очень распространенная проблема с рельсами 3.1. Среда выполнения js теперь необходима для стандартных гемов, таких как coffee-script и sass.

Большинство из этих случаев были разрешены путем добавления гемов execjs и therubyracer в Gemfile приложения, а затем с помощью «обновления пакета» и / или «установки пакета». Но не для меня.

Думаю, мне повезло. Я использую rails 3.1.3 / ruby ​​1.9 на старой версии Redhat Linux 4 (2.6.9-101.ELsmp), а 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

Как я могу это исправить?

Ответы [ 18 ]

341 голосов
/ 17 февраля 2012

Пользователи Ubuntu:

У меня была та же проблема, и я исправил ее, установив nodejs в моей системе, не зависящей от гема.

в Ubuntu: sudo apt-get install nodejs

Я использую 64-битную версию Ubuntu 11.10

. Из ответа @Galina ниже, я предполагаю, что требуется последняя версия nodejs, поэтому @ steve98177 ваш лучший вариант на RedHat (или CentOS) окно должно быть установлено из исходного кода, как @Galina, но так как вы не можете «сделать / установить» в этом окне?, я предлагаю вам попробовать установить скорость вращения fedora (длинный выстрел) https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager или найтидругой блок RH / CentOs (который вы можете «сделать») и создайте свой собственный rpm и установите его на оригинальный блок RH (если старый glibc на RH играет хорошо).

Реальная проблема здесь (IMHO) - установка Gems, которые зависят от установленных пакетов вне среды ruby, есть ли способ узнать перед установкой?RFI для Gems или связки?


CentOS / RedHat Пользователи:

sudo yum install nodejs
104 голосов
/ 09 февраля 2012

Добавьте в свой гемфайл:

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

Для более подробной информации: ExecJS и не удалось найти среду выполнения JavaScript

15 голосов
/ 04 апреля 2012

Это ссылка, которая мне нужна для решения проблемы (установите nodejs): https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

12 голосов
/ 23 июля 2013

Когда вы создаете пустой проект, эта строка комментируется в Gemfile. Просто раскомментируйте его и связывайте!

gem 'therubyracer', :platforms => :ruby
5 голосов
/ 15 октября 2012

У меня были похожие проблемы на Ubuntu 12.04. Установка Node.js исправлена.

4 голосов
/ 06 ноября 2013

Попробуйте установить NodeJS и попробуйте снова.

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

4 голосов
/ 18 октября 2012

Пользователи Fedora НЕ СМОГУТ выполнять простые "ням установки nodejs" из-за серьезных конфликтов имен и размещения файлов, которые мешают этому пакету быть доступным даже через репозитории Fedora.

По-видимому, по крайней мере один альтернативный репозиторий доступен с альтернативной сборкой, которая может работать, но это два слишком много "альтернатив" для меня, чтобы я захотел его использовать - я ищу другую альтернативу.

4 голосов
/ 06 мая 2012

Я использую Ubuntu 11.10- 32 бит с ruby ​​1.9.3p194, rails 3.2.3, gem 1.8.24.Получал ту же ошибку Javascript при запуске "консоли скрипт / рельсы".

Однако выполнение «sudo apt-get install nodejs» решило мою проблему.

3 голосов
/ 11 февраля 2012

У меня была такая же проблема на промежуточном сервере. У меня не было проблем с выполнением задач rake на локальном компьютере разработчика, но развертывание на промежуточный сервер завершилось неудачно с сообщением об ошибке «Не удалось найти среду выполнения JavaScript» при попытке запустить assets: precompile грабли.

Конечно, therubyracer и execjs были в моем Gemfile, и я использовал последние версии. Мои файлы Gemfile.lock совпали, и я еще раз проверил версии, запустив bundle show .

После поиска в Google я в итоге удалил все мои драгоценные камни и переустановил их , что устранило проблему. Я до сих пор не знаю, в чем причина, но, возможно, это поможет вам.

Вот как выглядит моя среда, кстати:

Ubuntu 10.04.3 LTS
rbenv
Ruby 1.9.2-p290
bundler-1.0.21
execjs-1.3.0
therubyracer-0.9.9
3 голосов
/ 31 марта 2012

У меня была такая же проблема. Добавление гемов 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 ​​& rails). И проблема была решена. Руби не пришлось переустанавливать.

...