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

191

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

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

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

Из всех постов это очень распространенная проблема с рельсами 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

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

steve98177
источник

Ответы:

346

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

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

на Ubuntu его: sudo apt-get install nodejs

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

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

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


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

sudo yum install nodejs
Пол Уильямс
источник
1
В Ubuntu мне пришлось выполнить обновление sudo apt-get, а затем работала установка nodejs.
Vineet Bhatia
У меня была такая же проблема на моем Ubuntu 12.04- 32 бит с ruby ​​1.9.3p392, rails 3.2.3, gem 1.8.25. Получал ту же ошибку во время работы "script / rails console" и "script / rails server". sudo apt-get install nodejsрешил мою проблему.
ajin6747
Должен ли это быть Node хотя? Я уверен, что вы можете использовать другие, такие как therubyracer, therubyrhino или Apple JavaScriptCore. Я знаю, что ExecJS их поддерживает. github.com/sstephenson/execjs
Дастин Гриффит
Попытка установить gem любой из альтернативных сред выполнения, поддерживаемых execjs, ни к чему не привела. действительно, установка nodejs работала. Далеко от идеала, но это поможет вам пройти пост.
Митч Кент
Я использую Ubuntu 14.04. Проблема решена после установки nodejs.
Чарльз Ву
108

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

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

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

Tiago
источник
1
Спасибо, но это не работает. Посмотрите на эту попытку, чтобы exbyjs распознал rubyrhino: gem which
rhino
У меня тоже сработало примечание для начинающих рельсов вроде меня: Gemfile находится в папке проекта.
McSas
1
Для тех из вас, для кого это не сработало: попробуйте gem install therubyracerсначала бежать .
Максимов
Для всех, у кого была эта проблема, я устанавливал лихой проект Shopify на систему CentOS 5.8 и столкнулся с проблемой времени исполнения execjs. Я добавил это к моему, Gemfileи это сработало.
Кейси
Хорошо, это работает, хорошо. Но почему мы должны это делать? Каждый раз, когда я добавляю строку в свой Gemfile, это должно иметь смысл для личных проектов, а для командных проектов это еще более грязно, поскольку это влияет на машины других пользователей, в то время как проблема зависела от конкретной среды. ИМХО, это не очень приличное решение в долгосрочной перспективе.
Августин Ридингер
13

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

gem 'therubyracer', :platforms => :ruby
Santhosh
источник
2
... и связка! Это, безусловно, самый простой ответ.
etusm
4

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

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

Вибин Б. Наир
источник
4

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

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

Мэтт Хек
источник
Возможно, в то время это было правдой, но сейчас все работает отлично (декабрь 2015 г.)
Митч Кент
4

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

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

Джулиан Аранго Лопес
источник
3

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

Конечно, 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
TheSpend
источник
У меня эта проблема на Ubuntu 10.04. Не думал, что стоит пойти с Ubuntu 12.04, но я думаю, что это так! Итак, я думаю, что в моем случае проблема в том, что я компилировал и перекомпилировал мой ruby ​​(1.9.3, 1.9.2) слишком много раз. Я перекомпилирую его снова, чтобы посмотреть, исправит ли это. Ох, и я обновляю свой apt-get до последней версии.
Виктор Пудеев
3

У меня такая же проблема. Добавление драгоценных камней «execjs» и «therubyracer» не работает для меня. apt-get install nodejs - тоже не работает. Я использую 64bit 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). И проблема была решена. Руби не пришлось переустанавливать.

Галина
источник
любой, кто попробует это сейчас, получит ошибку. пожалуйста, попробуйте следующий git clone github.com/nodejs/node
Yeasin Ar Rahman
2

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

Годвин
источник
я также случайно удалил какой-то путь из моей машины с Windows, не могли бы вы упомянуть, как вы добавили путь js
Хуссейн Ахтар Вахид 'Ghouri'
@HussainAkhtarWahid, я не перезаписывал свой autoexec или что-то еще, поэтому мне нужно было просто закрыть сеанс cmd и снова открыть его.
Годвин
Хорошо сэр, это была моя проблема после попытки настроить все необходимое для среды разработки Windows ruby
HostMyBus
2

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

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

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

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

LorneCurrie
источник
1

На Ubuntu мне пришлось, sudo apt-get updateа затем работала установка nodejs.

kilombo1
источник
1

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

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

Мадхан Айясами
источник
0

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

Вишну Хариш
источник
0

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

javabeangrinder
источник
0

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

разъем
источник