ExecJS и не удалось найти среду выполнения JavaScript


403

Я пытаюсь использовать шаблон Mongoid / Devise Rails 3.1 ( Mongoid и Devise ), и все время получаю сообщение о том, что ExecJS не может найти среду выполнения JavaScript. Достаточно справедливо, когда у меня не было никаких установленных программ, но я пытался установить Node.js , Mustang и Ruby Racer , но ничего не помогло.

Я не мог найти среду выполнения JavaScript. См. Sstephenson / ExecJS (GitHub) для получения списка доступных сред выполнения ( ExecJS::RuntimeUnavailable).

Что мне нужно сделать, чтобы это работало?


4
Кстати, я использую Ubuntu Karmic.
srboisvert

Вы должны действительно рассмотреть вопрос об изменении ответа. Ответ Node.js не так хорош, как execjs / rubyracer.
Шон Данфорд

3
У rubyracer есть и другие проблемы. Heroku больше не рекомендует включать его в свой Gemfile, если вы можете избежать этого. devcenter.heroku.com/articles/rails-asset-pipeline#therubyracer Я думаю, что установка правильной среды выполнения Javascript в Ubuntu является правильным ответом на этот вопрос.
М. Скотт Форд

Ответы:


436

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

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

Начиная с Ubuntu 13.04 x64 вам нужно только запустить:

sudo apt-get install nodejs

Это решит проблему.


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

sudo yum install nodejs

1
попробовал это. не повезло. Интересно, это конфликт RVM или что-то. Все, что предложили другие люди, не сработало для меня.
srboisvert

76
gem 'execjs' gem 'therubyracer' это лучшее решение, чем это.
dwaynemac

26
Heroku теперь сильно обескураживает therubyracer из-за использования памяти. Я установил nodejs на своем компьютере разработчика в соответствии с этим ответом и вынул therubyracer из моего gemfile. См. Также stackoverflow.com/questions/7092107/… .
Марк Берри

11
@dwaynemac Я не согласен. Я бы предпочел, чтобы среда выполнения существовала как библиотека ОС (как с Mac и Windows по умолчанию), а не добавляла еще один драгоценный камень в список зависимостей.
Уильям Деннисс

1
Кажется, что therubyracer и execjs вызывают проблемы с развертыванием heroku, если только не было изменено что-то еще, что я пропустил. Это предпочтительное решение.
Штурм

445

Просто добавьте ExecJS и Ruby Racer в свой гем-файл и запустите bundle installпосле.

gem 'execjs'

gem 'therubyracer'

Все должно быть хорошо после.


6
Это сработало для меня, рельсы 3.1rc4 и Ubuntu 11.04 (моя первая попытка с рельсами 3.1). Я пытался создать эшафот, когда я получил ошибку. Все еще довольно хромая, что рельсы 3.1 "сломаны" из коробки.
чудесный день

35
Для Rails 3.1 RC 6 вам просто нужно указатьgem 'therubyracer'
Amree

5
В любом случае нужно ли включать эти гемы в Gemfile по умолчанию при создании нового приложения?
Ричард Фосетт

2
это лучшее решение, чем установка node.js. Если вы развертываете на удаленном сервере или делитесь приложением с другими разработчиками, то, чтобы все установили node.js, было гораздо сложнее, чем просто выполнить установку пакета, что они и сделали бы в любом случае.
jdkealy

19
Heroku теперь сильно обескураживает therubyracer из-за использования памяти. Я установил nodejs на своем компьютере разработчика ( github.com/joyent/node/wiki/… ) и вынул therubyracer из моего gemfile. См. Также stackoverflow.com/questions/7092107/… .
Марк Берри

77

В вашем Gem файле напишите

gem 'execjs'
gem 'therubyracer'

а потом беги

bundle install

У меня все отлично работает :)


9
Вам не нужно добавлять 'execjs'
miguelSantirso

Да, вы правы в рельсах 3.2.1 вы должны использовать только gem'therubyracer '
manish nautiyal

Спасибо @manish nautiyal и @ Питер Мортенсен. это работает для меня
Равиндра

48

У меня была похожая проблема: мое приложение Rails 3.1 нормально работало в Windows, но получало ту же ошибку, что и OP, при работе в Linux. Исправление, которое работало для меня на обеих платформах, заключалось в добавлении следующего к моему Gemfile:

gem 'therubyracer', :platforms => :ruby

Хитрость заключается в том, чтобы знать, что на :platforms => :rubyсамом деле означает использовать этот драгоценный камень только с «C Ruby (MRI) или Rubinius, но НЕ Windows».

Другие возможные значения :platformsописаны в на bundlerстранице человека .

К вашему сведению: Windows имеет встроенный движок JavaScript, который execjsможет найти. В Linux нет встроенной функции, хотя есть несколько доступных для установки. therubyracerэто один из них. Другие перечислены в execjs README.md .


Спасибо, этот исправил это для меня в Ubuntu Oneiric с использованием rvm установки ruby ​​1.9.3 и Rails 3.2.1
Yashima

Большое спасибо, сэр!
DaTroop

Я столкнулся с ошибкой на сервере CentOS с установленным node.js. Это заставило меня пройти мимо. Спасибо!
ncherro

36

Добавление следующего драгоценного камня в мой Gemfile решило проблему:

gem 'therubyracer'

Затем объедините ваши новые зависимости:

$ bundle install

также добавьте gem 'execjs' в Gemfile
Биендра

6
execjs уже включен рельсами. Это было необходимо только во время освобождения кандидатов.
JDutil

16

Альтернативный способ - просто связать без группы драгоценных камней, которая содержит вещи, которых у вас нет.

Ну действуй:

bundle install --without assets

вам вообще не нужно изменять Gemfile, если, конечно, вы не занимаетесь цепочкой активов - что обычно применяется в средах, не связанных с разработкой. Bundle запомнит ваш параметр --without в файле .bundle / config.


Лучший ответ. Работал на рельсах версии 3.2.3
Францды Ромен

1
Это здорово, и такое простое исправление. На сайте Heroku сказано, что RubyRacer больше не требуется (со стеком Cedar), поэтому я был озадачен, почему вдруг моя программа не запустилась локально. Это добилось цели.
Майк Блайт

6

Добавьте следующие драгоценные камни в свой файл драгоценного камня

gem 'therubyracer'
gem 'execjs'

и беги

bundle install

вы сделали :)


6

Для Amazon Linux (AMI):

sudo yum install nodejs npm --enablerepo=epel

1
Спасибо, это должно быть на более высоком уровне
Дэвид Маурисио

это было важно для того, чтобы заставить развертывание capistrano работать на стандартном дистрибутиве Linux linux.
JJK


4

У меня была такая же ошибка, но только на моем промежуточном сервере, а не в производственной среде. nodejs уже был установлен в обеих средах.

Набрав:

which node

Я обнаружил, что команда узла находилась в: / usr / bin / node на производстве, но: / usr / local / bin / node в стадии подготовки.

После создания символической ссылки на постановку, т.е.

sudo ln -s /usr/local/bin/node /usr/bin/node

приложение тогда работало в постановке.

Нет суеты, нет суеты.


работает как шарм! А также консультации: я нуждался марка символическая для nodejsтакже
Рафаэль Гомес Франциско

3

Не используйте RubyRacer, так как это плохо сказывается на памяти. Установка Node.js, как предлагают некоторые люди здесь, является лучшей идеей.

Этот список доступных сред выполнения, которые могут использоваться библиотекой ExecJs, также документирует использование Node.js.

https://github.com/sstephenson/execjs

Итак, Node.js не является излишним и гораздо лучшим решением, чем использование RubyRacer.



0

Я начал сталкиваться с этой проблемой, когда начал использовать rbenv с Ruby 1.9.3, где в качестве системного ruby ​​используется 1.8.7. Драгоценный камень установлен в обоих местах, но по какой-то причине скрипт rails не поднял его. Но добавление "execjs" и "therubyracer" в Gemfile помогло.


0

В вашем файле gem раскомментируйте эту строку.

19 # драгоценный камень 'therubyracer', платформы :: ruby

И запустите пакетную установку

Вы готовы к работе. :)


0

Попытка отладки в RubyMine с использованием Ubuntu 18.04, Ruby 2.6. *, Rails 5 и RubyMine 2019.1.1 натолкнулась на ту же проблему.

Чтобы решить эту проблему, я раскомментировал mini_racerстроку из моего Gemfileи затем запустил bundle:

# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'mini_racer', platforms: :ruby

Изменить на:

# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'mini_racer', platforms: :ruby

0

Я установил nodeчерез nvm и столкнулся с этой проблемой при развертывании с Capistrano. Capistrano не загружал nvm автоматически, потому что он работает не в интерактивном режиме.

Чтобы исправить это, просто переместите строки, которые nvm добавляет к вам, ~/.bashrcвверх. Файл будет выглядеть примерно так:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.