it-swarm.com.ru

execJs: «Не удалось найти среду выполнения JavaScript», но execjs И therubyracer находятся в Gemfile

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

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

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

Из всех сообщений это очень распространенная проблема с Rails 3.1. Теперь требуется js runtime для того, что теперь является стандартными гемами, такими как 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

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

187
steve98177

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

У меня была та же проблема, и я исправил ее, установив nodejs на мою систему независимо от драгоценного камня.

в Ubuntu его: Sudo apt-get install nodejs

Я использую 64bit Ubuntu 11.10

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

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


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

Sudo yum install nodejs
340
Paul Williams

В вашем gemfile добавьте:

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

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

104
Tiago

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

15
Abram

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

gem 'therubyracer', :platforms => :Ruby
12
Santhosh

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

5
Ramiz Raja

Я использую Ubuntu 11.10- 32 бит с Ruby 1.9.3p194, Rails 3.2.3, гем 1.8.24. Получал ту же ошибку Javascript во время работы "скрипт/консоль Rails".

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

4
Vibin B. Nair

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

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

4
Kent Aguilar

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

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

4
Matt Heck

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

Конечно, 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
TheSpend

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

3
Galina

Я вырвал свои волосы с этой ошибкой несколько раз. Мне удалось заставить его когда-нибудь исчезнуть, перезапустив Apache/Nginx.

Поэтому я исправил это так же, как и выше, добавив в файл GEM следующее:

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

а затем я удалил свой файл gemfile.lock, а затем перезапустил "пакетную установку". Я обнаружил, что только тогда "пакетная установка" установила правильные библиотеки и т.д.

2
LorneCurrie

Если вы были на Ubuntu $ Sudo apt-get install nodejs

Старайтесь не использовать другие системы, такие как Windows, для разработки. Подумайте, что почти все серверы в мире являются серверами Linux, поэтому, когда вы попытаетесь развернуть это приложение, будет проще, если вы разработали его также в среде Linux или Unix.

2
Julian Arango López

У меня это происходило на моей машине с Windows, оказалось, что проблема была совсем другой. Я случайно удалил несколько путей из моей переменной %PATH%. Просто перезапустив командную строку, решил это. Кажется, что на одном из этих отсутствующих путей была среда выполнения JS.

2
Godwin

когда я генерирую Rails g контроллер, я получаю ту же ошибку. После этого, когда были сделаны следующие изменения в Gemfile (в Rails 4), все прошло гладко. Изменения, которые я сделал, были

драгоценный камень "execjs"
gem 'therubyracer', "0.11.4"
После этого я могу запустить сервер и выполнить все основные операции с приложением.

1
Madhan Ayyasamy

В Ubuntu мне нужно было Sudo apt-get update, и тогда работала установка nodejs.

1
kilombo1

В моем случае выполнение команды bundle помогло. Я надеюсь, что они находят друг друга тогда.

0
javabeangrinder

У меня была эта проблема при использовании RubyMine (6.3.3). Однажды я попытался запустить свой код, но он не сработал, и пожаловался на то, что не обнаружена среда выполнения JavaScript. Я смог запустить Rails s хотя. Для меня исправлением было создание новой конфигурации Run. Кажется действительно странным, что конфигурация Run станет поврежденной.

0
Jack

добавьте в ваш gemfile, который находится в папке, которую вы создали: gem 'execjs' gem 'therubyracer'

0
Vishnu Harish