ExecJS і не вдалося знайти час виконання JavaScript


403

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

Не вдалося знайти час виконання JavaScript. Дивіться sstephenson / ExecJS (GitHub) для переліку доступних режимів виконання ( ExecJS::RuntimeUnavailable).

Що мені потрібно зробити, щоб це працювало?


4
btw - я використовую карбу ubuntu.
srboisvert

Ви дійсно повинні розглянути можливість зміни відповіді. Відповідь Node.js не так добре, як execjs / rubyracer.
Шон Данфорд

3
У рубіракера є й інші проблеми. 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 "зламані" поза коробкою.
greatthunk

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 та @ Peter Mortensen. це працює для мене
Равіндра

48

У мене була подібна проблема: мій додаток Rails 3.1 відмінно працював у Windows, але отримав таку ж помилку, що і ОП під час роботи в Linux. Виправлення, яке працювало для мене на обох платформах, полягало в тому, щоб додати моє Gemfile:

gem 'therubyracer', :platforms => :ruby

Хитрість полягає в тому, що :platforms => :rubyнасправді означає використовувати цей самоцвіт лише з "C Ruby (MRI) або Rubinius, але НЕ з Windows".

Інші можливі значення для :platformsописані на вкладці " bundlerman" .

FYI: У 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 / config.


Найкраща відповідь. Працював на рейках версії 3.2.3
Франтзді Ромен

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

6

Додайте наступні дорогоцінні камені у свій файл дорогоцінних каменів

gem 'therubyracer'
gem 'execjs'

і біжи

bundle install

ви закінчили :)


6

Для linux Amazon (AMI):

sudo yum install nodejs npm --enablerepo=epel

1
Дякую, це повинно бути на більш високому рівні
Девід Маурісіо

це мало важливе значення для отримання розгортання для роботи над стандартним дистрибутивом Linux для AWS.
jjk


4

У мене була така ж помилка, але лише на моєму сервісі, а не в моєму виробничому середовищі. nodejs вже встановлений в обох середовищах.

Ввівши:

which node

Я з'ясував, що команда node розташована у: / usr / bin / node у виробництві, але: / usr / local / bin / node під час постановки.

Після створення символьної посилання на постановці, тобто:

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

додаток потім працював у постановці.

Ні мус, ні суєти.


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

3

Не використовуйте RubyRacer, оскільки це погано на пам’яті. Встановити Node.js, як пропонують деякі люди, тут краща ідея.

Цей перелік доступних режимів виконання, який може використовуватись ExecJs Library, також документує використання Node.js

https://github.com/sstephenson/execjs

Отже, Node.js - це не зайвий набір і набагато краще рішення, ніж використання RubyRacer.



0

Я почав отримувати цю проблему, коли почав використовувати rbenv з Ruby 1.9.3, де як мій системний рубін - 1.8.7. Самоцвіт встановлений в обох місцях, але чомусь сценарій рейлів його не взяв. Але додавання "execjs" та "therubyracer" до Gemfile зробило свою справу.


0

У вашому коштовному файлі Відмініть цей рядок.

19 # gem '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.