Rails: не удалось найти среду выполнения JavaScript. Смотрите https://github.com/sstephenson/execjs список доступных сред выполнения. (ExecJS::RuntimeUnavailable)

#javascript #ruby-on-rails #ruby-on-rails-3.1 #v8 #dreamhost

#javascript #ruby-on-rails #ruby-on-rails-3.1 #версия 8 #dreamhost

Вопрос:

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

Я использую Rails 3.1.1 на Ruby 1.8.7 и получаю сообщение об ошибке «Не удалось запустить приложение Ruby (Rack)» от PhusionPassenger. В нем говорится, что «Не удалось найти среду выполнения JavaScript. Смотрите https://github.com/sstephenson/execjs список доступных сред выполнения. (ExecJS::RuntimeUnavailable)’. Поиск этого в вики Dreamhost предложил решение для установки драгоценного камня ‘therubyracer’.

Итак, я обновил свой gemfile предложенным gem следующим образом:

gem ‘therubyracer’, ‘~> 0.9.9’

РЕДАКТИРОВАТЬ: я также пытался добавить в файл с:

gem ‘therubyracer’, :платформы => :ruby

но это ничего не изменило.

Затем пакет установлен на моем Macbook (под управлением OS X 10.5.8) без сбоев. Однако, это не удается, когда я запускаю ‘cap deploy’ для установки на Dreamhost; Я вижу ошибку при попытке установить libv8, от которого зависит therubyracer.

Кто-нибудь знает, как правильно установить это или любое другое рабочее решение?

Любая другая информация может быть предоставлена по запросу.

Полный отзыв об ошибке от терминала:

  • выполнение сервера «cd /home/futureproof/abunchofletters.co.uk/releases/20111118003703 amp;amp; bundle install —gemfile /home/futureproof/abunchofletters.co.uk/releases/20111118003703/Gemfile —path /home/futureproof /.gems /bundle —deployment —quiet —without development test»: [«abunchofletters.co.uk «] [abunchofletters.co.uk ] выполнение команды ** [out :: abunchofletters.co.uk ] К сожалению, произошла неустранимая ошибка. Пожалуйста, сообщите об этой ошибке в Bundler issue tracker по адресу https://github.com/carlhuda/bundler/issues чтобы мы могли это исправить. Спасибо! ** [out :: abunchofletters.co.uk ] /usr/lib/ruby/1.8/rubygems/installer.rb:483:в build_extensions':
    ERROR: Failed to build gem native extension.
    (Gem::Installer::ExtensionBuildError) ** [out ::
    abunchofletters.co.uk] ** [out :: abunchofletters.co.uk]
    /usr/bin/ruby1.8 extconf.rb ** [out :: abunchofletters.co.uk] ***
    extconf.rb failed *** ** [out :: abunchofletters.co.uk] Could not
    create Makefile due to some reason, probably lack of ** [out ::
    abunchofletters.co.uk] necessary libraries and/or headers. Check the
    mkmf.log file for more ** [out :: abunchofletters.co.uk] details.
    You may need configuration options. ** [out :: abunchofletters.co.uk]
    ** [out :: abunchofletters.co.uk] Provided configuration options: ** [out :: abunchofletters.co.uk] --with-opt-dir ** [out ::
    abunchofletters.co.uk] --without-opt-dir ** [out ::
    abunchofletters.co.uk] --with-opt-include ** [out ::
    abunchofletters.co.uk] --without-opt-include=${opt-dir}/include **
    [out :: abunchofletters.co.uk] --with-opt-lib ** [out ::
    abunchofletters.co.uk] --without-opt-lib=${opt-dir}/lib ** [out ::
    abunchofletters.co.uk] --with-make-prog ** [out ::
    abunchofletters.co.uk] --without-make-prog ** [out ::
    abunchofletters.co.uk] --srcdir=. ** [out :: abunchofletters.co.uk]
    --curdir ** [out :: abunchofletters.co.uk] --ruby=/usr/bin/ruby1.8 ** [out :: abunchofletters.co.uk] extconf.rb:13: uninitialized constant Gem (NameError) ** [out :: abunchofletters.co.uk] Checking
    for Python... ** [out :: abunchofletters.co.uk] ** [out ::
    abunchofletters.co.uk] Gem files will remain installed in
    /home/futureproof/.gems/bundle/ruby/1.8/gems/libv8-3.3.10.4 for
    inspection. ** [out :: abunchofletters.co.uk] Results logged to
    /home/futureproof/.gems/bundle/ruby/1.8/gems/libv8-3.3.10.4/ext/libv8/gem_make.out
    ** [out :: abunchofletters.co.uk] from /usr/lib/ruby/1.8/rubygems/installer.rb:446:in
    каждом’ ** [out :: abunchofletters.co.uk ] из /usr/lib/ruby/1.8/rubygems/installer.rb:446:в build_extensions' **
    [out :: abunchofletters.co.uk] from
    /usr/lib/ruby/1.8/rubygems/installer.rb:198:in
    установке’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/source.rb:90:в install' ** [out :: abunchofletters.co.uk] from
    /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/rubygems_integration.rb:78:in
    сохраненных путях’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/source.rb:89:в install' ** [out :: abunchofletters.co.uk] from
    /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:73:in
    install_gem_from_spec’ ** [выход :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/rubygems_integration.rb:93:в with_build_args' ** [out :: abunchofletters.co.uk] from
    /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:72:in
    install_gem_from_spec’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:56:в run' ** [out :: abunchofletters.co.uk] from
    /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:55:in
    выполнить’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/installer.rb:12:в install' ** [out :: abunchofletters.co.uk] from
    /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/cli.rb:219:in
    установке’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor/task.rb:22:в send' ** [out :: abunchofletters.co.uk] from
    /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor/task.rb:22:in
    запуске’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor/invocation.rb:118:в invoke_task' ** [out :: abunchofletters.co.uk] from
    /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor.rb:263:in
    отправке’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/gems/bundler-1.1.rc/lib/bundler/vendor/thor/base.rb:386:в start' ** [out :: abunchofletters.co.uk] from
    /home/futureproof/.gems/gems/bundler-1.1.rc/bin/bundle:13 ** [out ::
    abunchofletters.co.uk] from /home/futureproof/.gems/bin/bundle:19:in
    загрузке’ ** [out :: abunchofletters.co.uk ] из /home/futureproof/.gems/bin/bundle: 19 команда завершена за 13170 мс *** [развертывание: update_code] откат * выполнение «rm -rf /home/futureproof/abunchofletters.co.uk/releases/20111118003703; true» серверы: [«abunchofletters.co.uk «] [abunchofletters.co.uk ] сбой выполнения командной строки, завершившийся за 563 мс: «sh -c ‘cd /home/futureproof/abunchofletters.co.uk/releases/20111118003703 amp;amp; bundle install —gemfile /home/futureproof/abunchofletters.co.uk/releases/20111118003703/Gemfile —path /home/futureproof/.gems/ пакет -развертывание -тихое -без тестирования разработки»» вкл. abunchofletters.co.uk

Ответ №1:

Если вы используете Ubuntu, установите nodejs

 sudo apt-get install nodejs
  

Комментарии:

1. такс, привет из Колумбии

2. Вместо того, чтобы благодарить, я нахожу любопытным, что для Ubuntu 14.04 установка nodejs приводит к успешному результату, а libv8-dev нет.

3. это решение также работает для macos brew install node

Ответ №2:

libv8 это библиотека операционной системы; вам необходимо установить правильную системную библиотеку Linux. Если вы используете Ubuntu, это

 sudo apt-get install libv8-dev
  

В качестве альтернативы вы можете установить, node.js который доступен в виде пакета Debian / Ubuntu для различных дистрибутивов, например http://ppa.launchpad.net/chris-lea/node.js/ubuntu

Вы можете избавить себя от многих проблем, развернув вместо этого Heroku, где вам не нужно управлять ОС или компонентами для gems.

Комментарии:

1. У меня нет разрешения sudo на общем сервере, но мне удалось установить node.js который решил проблему. Я подумываю о том, чтобы дать Heroku надлежащий ход сейчас, хотя, похоже, возникают бесконечные проблемы с получением сайта Rails 3, работающего с конвейером активов.

2. @Rich, Heroku, безусловно, лучший вариант. Как разработчик я обнаружил, что не хочу иметь дело со всем, что требуется для поддержания работоспособности сервера, защиты, установки исправлений, резервного копирования и т.д. В лучшем случае это отнимает много времени, в худшем — очень хрупкий. Пусть это сделают эксперты, которые делают это хорошо.

Ответ №3:

я использую эти драгоценные камни на Dreamhost с Rails 3.1 для конвейера ресурсов

 group :assets do
  gem 'execjs'
  gem 'therubyracer', :platforms => :ruby
  gem 'johnson'
  gem 'sass-rails', "  ~> 3.1.0"
  gem 'coffee-rails', "~> 3.1.0"
  gem 'uglifier'
end
  

therubyracer в качестве предварительного компилятора и johnson в качестве среды выполнения.

Это работает для меня в 2 приложениях Rails 3.1, размещенных Dreamhost.

Комментарии:

1. Спасибо за комментарий. Вы используете общий сервер Dreamhost или VPS? Какую версию Ruby вы используете?

2. В 2021 году, Rails 4.2.10, этот ответ решил мою проблему на общем сервере Dreamhost

Ответ №4:

Вам просто нужно получить libv8 , для ОС с Brew просто сделайте:

 brew install v8
  

Ответ №5:

Я нахожусь на общем сервере dreamhost.

Я установил nodejs без использования root / sudo. На сервере:

 #download node js (check last version from web)
$ wget http://nodejs.org/dist/v0.8.16/node-v0.8.16-linux-x86.tar.gz
#untar
$ tar xzf node-v0.8.16-linux-x86.tar.gz
  

Наконец, добавьте его путь к deploy.rb, добавив следующую строку (в этом случае добавляются еще несколько путей):

 default_environment["PATH"] = ":/home/myUser/soft/node-v0.8.16-linux-x86/bin:/home/myUser/.gems/bin:/usr/lib/ruby/gems/1.8/bin/:$PATH"
  

Вы закончили

Комментарии:

1. В моем случае ПУТЬ для добавления в deploy.rb был просто: default_environment["PATH"] = "$HOME/local/bin:$PATH"

2. Я пытаюсь использовать ваше решение, но не могу найти файл deploy.rb. Как я могу это найти? Должен ли я это где-то создать?

Ответ №6:

Я только что видел презентацию по этому вопросу.

До сих пор я использовал rubytheracer. По-видимому, это не так уж и здорово. И это огромно.

Но вы можете использовать любую среду выполнения javascript.

Другие два рекомендуемых — это execjs и node.js (что сейчас очень актуально).

Обязательно укажите gem install выбранный gem, а затем bundle install или bundle update для вашего приложения.

Еще одно замечание заключается в том, что вам также следует переключиться на 1.9.2.
Установите RVM (bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )) и у вас могут быть параллельные версии 1.8.7 и 1.9.2.

Ответ №7:

Я бы предложил установить Nodejs. У меня это сработало.

Просто зайдите в свой терминал и введите :

sudo apt-get install node.js

Введите свой пароль…И нажимайте «Y» всякий раз, когда он запрашивает подтверждение. Я надеюсь, что это поможет!!!

Комментарии:

1. Как я сказал в ответе Wolfram, у меня нет разрешения sudo на моем общем сервере, но это может хорошо сработать для тех, кто это делает.

Ответ №8:

Я только что столкнулся с той же проблемой на моем компьютере разработчика Win7. Это похоже на установку https://github.com/hiranpeiris/therubyracer_for_windows и добавление gem 'therubyracer' к Gemfile упорядочивает ситуацию.

Перед:

 $ rails generate
c:/Ruby193/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
    from c:/Ruby193/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs.rb:5:in `<module:ExecJS>'
(...)
  

По сути, это означает, что Rails нуждается в rubyracer и libv8 .

После:

 $ rails generate
    SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
    This poses a security threat. It is strongly recommended that you
    provide a secret to prevent exploits that may be possible from crafted
    cookies. This will not be supported in future versions of Rack, and
    future versions will even invalidate your existing user cookies.

    Called from: c:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/session/abstract_store.rb:28:in `initialize'.

Usage: rails generate GENERATOR [args] [options]
(...)
  

Ответ №9:

Добавьте следующий gem в Gemfile и попробуйте установить пакет

gem «therubyracer», «~> 0.10.2»

Ответ №10:

Эта ошибка вызвана отсутствием среды выполнения Javascript. Как Nodejs. Либо вы ее не выбрали, либо она не установлена.

Посмотрите, есть ли у вас уже nodejs, использующие,

 nvm list
nvm use <version> //to use it (i.e nvm use 14)
  

если он не установлен, используйте,

 sudo apt-get install nodejs