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 ]

2 голосов
/ 23 апреля 2013

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

2 голосов
/ 12 октября 2017

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

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

2 голосов
/ 09 июля 2013

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

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

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

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

1 голос
/ 17 декабря 2014

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

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

1 голос
/ 26 июля 2014

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

0 голосов
/ 29 июля 2014

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

0 голосов
/ 16 января 2014

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

0 голосов
/ 20 июля 2013

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

...