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

403

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

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

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

srboisvert
источник
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
eldewall
источник
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

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

Manish Nautiyal
источник
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 .

jwfearn
источник
Спасибо, этот исправил это для меня в Ubuntu Oneiric с использованием rvm установки ruby ​​1.9.3 и Rails 3.2.1
Yashima
Большое спасибо, сэр!
DaTroop
Я столкнулся с ошибкой на сервере CentOS с установленным node.js. Это заставило меня пройти мимо. Спасибо!
ncherro
36

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

gem 'therubyracer'

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

$ bundle install
JDutil
источник
также добавьте gem 'execjs' в Gemfile
Биендра
6
execjs уже включен рельсами. Это было необходимо только во время освобождения кандидатов.
JDutil
16

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

Ну действуй:

bundle install --without assets

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

moschops
источник
Лучший ответ. Работал на рельсах версии 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

Я использовал для добавления Ruby Racer в файл Gem. Но эй, Node.js работает!

Ричард Чжан
источник
как вы добавляете nodejs в gemfile? Я не нашел драгоценный камень nodejs.
Папуш Guinslyzinho
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 помогло.

arangamani
источник
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
CommandZ
источник
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
Кевин Купер
источник