ExecJS i nie można znaleźć środowiska wykonawczego JavaScript


403

Próbuję użyć szablonu Mongoid / Devise Rails 3.1 ( Mongoid i Devise ) i ciągle pojawia się błąd informujący, że ExecJS nie może znaleźć środowiska wykonawczego JavaScript. W porządku, gdy nie miałem żadnych zainstalowanych, ale próbowałem zainstalować Node.js , Mustanga i Ruby Racera , ale nic nie działa.

Nie mogłem znaleźć środowiska wykonawczego JavaScript. Zobacz sstephenson / ExecJS (GitHub), aby uzyskać listę dostępnych środowisk uruchomieniowych ( ExecJS::RuntimeUnavailable).

Co muszę zrobić, aby to działało?


4
btw - używam ubuntu karmic.
srboisvert

Naprawdę powinieneś rozważyć zmianę odpowiedzi. Odpowiedź Node.js nie jest tak dobra jak execjs / rubyracer.
Sean Dunford,

3
Rubyracer ma z tym inne problemy. Heroku nie zaleca już włączania go do pliku Gem, jeśli możesz tego uniknąć. devcenter.heroku.com/articles/rails-asset-pipeline#therubyracer Myślę, że zainstalowanie odpowiedniego środowiska uruchomieniowego JavaScript na Ubuntu jest poprawną odpowiedzią na to pytanie.
M. Scott Ford

Odpowiedzi:


436

Użytkownicy Ubuntu

Jestem na Ubuntu 11.04 i miałem podobne problemy. Zainstalowanie Node.js naprawiło to.

Od wersji Ubuntu 13.04 x64 wystarczy uruchomić:

sudo apt-get install nodejs

To rozwiąże problem.


Użytkownicy CentOS / RedHat

sudo yum install nodejs

1
spróbował tego. brak szczęścia. Zastanawiam się, czy to konflikt RVM czy coś takiego. Wszystko, co sugerują inni, nie zadziałało dla mnie.
srboisvert

76
gem 'execjs' gem 'therubyracer' to lepsze rozwiązanie niż ten.
dwaynemac,

26
Heroku jest teraz zdecydowanie odradzające termokryształowi ze względu na wykorzystanie pamięci. Zainstalowałem nodejs na mojej maszynie deweloperskiej zgodnie z tą odpowiedzią i wyjąłem Therubyracer z mojego gemfile. Zobacz także stackoverflow.com/questions/7092107/… .
Mark Berry

11
@dwaynemac Nie zgadzam się. Wolę, aby środowisko wykonawcze istniało jako biblioteka systemu operacyjnego (jak domyślnie w systemach Mac i Windows), zamiast dodawać kolejny klejnot do listy zależności.
William Denniss,

1
Wygląda na to, że therubyracer i execjs powodują problemy z wdrożeniem heroku, chyba że coś, co zostało zmodyfikowane, które przeoczyłem. To jest preferowane rozwiązanie.
Sturm

445

Po prostu dodaj ExecJS i Ruby Racer do swojego pliku klejnotów i biegnij bundle installza nimi.

gem 'execjs'

gem 'therubyracer'

Po tym wszystko powinno być w porządku.


6
To zadziałało dla mnie, Rails 3.1rc4 i Ubuntu 11.04 (moja pierwsza próba z Rails 3.1). Kiedy dostałem błąd, próbowałem wygenerować rusztowanie. Wciąż dość kiepski, że szyny 3.1 są „zepsute” po wyjęciu z pudełka.
wonderfulthunk

35
W przypadku Rails 3.1 RC 6 wystarczy podaćgem 'therubyracer'
Amree

5
Czy w ogóle istnieje możliwość umieszczenia tych klejnotów w domyślnym pliku Gemfile podczas tworzenia nowej aplikacji?
Richard Fawcett,

2
jest to lepsze rozwiązanie niż instalacja node.js. Jeśli wdrażasz na zdalnym serwerze lub udostępniasz aplikację innym programistom, to wszyscy instalują node.js znacznie bardziej boli niż tylko instalacja pakietu, co i tak by zrobili.
jdkealy,

19
Heroku jest teraz zdecydowanie odradzające termokryształowi ze względu na wykorzystanie pamięci. Zainstalowałem nodejs na mojej maszynie deweloperskiej ( github.com/joyent/node/wiki/... ) i wyjąłem Therubyracer z mojego gemfile. Zobacz także stackoverflow.com/questions/7092107/… .
Mark Berry

77

W swoim pliku Gem napisz

gem 'execjs'
gem 'therubyracer'

a następnie biegnij

bundle install

Wszystko działa dla mnie dobrze :)


9
Nie musisz dodawać „execjs”
miguelSantirso

Tak, jesteś w szynach 3.2.1, musisz użyć tylko gem'therubyracer '
manish nautiyal

Dzięki @manish nautiyal i @ Peter Mortensen. to działa dla mnie
Ravindra

48

Miałem podobny problem: moja aplikacja Rails 3.1 działała dobrze w systemie Windows, ale otrzymała ten sam błąd co OP podczas pracy w systemie Linux. Poprawka, która zadziałała dla mnie na obu platformach, polegała na dodaniu do mojego Gemfile:

gem 'therubyracer', :platforms => :ruby

Sztuka polega na tym, aby wiedzieć, że :platforms => :rubytak naprawdę oznacza to używanie tego klejnotu z „C Ruby (MRI) lub Rubinius, ale NIE w systemie Windows”.

Inne możliwe wartości :platformssą opisane na bundlerstronie podręcznika .

Informacje: System Windows ma wbudowany silnik JavaScript, który execjsmoże zlokalizować. W systemie Linux nie ma wbudowanego, chociaż istnieje kilka dostępnych do zainstalowania. therubyracerjest jednym z nich. Inne są wymienione w execjs pliku README.md .


Dzięki, ten naprawił to dla mnie na Ubuntu Oneiric przy użyciu rvm instalacji Ruby 1.9.3 i Rails 3.2.1
Yashima

Dziękuję Panu bardzo!
DaTroop

Wystąpił błąd na serwerze CentOS z zainstalowanym node.js. To mnie przebiło. Dzięki!
ncherro

36

Dodanie następującego klejnotu do mojego Gemfile rozwiązało problem:

gem 'therubyracer'

Następnie połącz swoje nowe zależności:

$ bundle install

dodaj także gem 'execjs' w Gemfile
Bijendra

6
execjs jest już zawarte w szynach. Było to wymagane tylko podczas kandydatów do wydania.
JDutil

16

Alternatywnym sposobem jest po prostu pakowanie bez grupy klejnotów zawierającej rzeczy, których nie masz.

Więc zrób:

bundle install --without assets

nie musisz wcale modyfikować pliku Gemfile, oczywiście pod warunkiem, że nie robisz rzeczy związanych z łańcuchem zasobów - co zwykle ma zastosowanie w środowiskach innych niż programistyczne. Pakiet zapamięta twoje ustawienie „--without” w pliku .bundle / config.


Najlepsza odpowiedź. Pracował dla wersji szyn 3.2.3
Frantzdy Romain

1
To jest świetne i takie proste rozwiązanie. Witryna Heroku mówi, że RubyRacer nie jest już wymagany (ze stosem Cedar), więc zastanawiałem się, dlaczego nagle mój program nie uruchomił się lokalnie. To załatwiło sprawę.
Mike Blyth,

6

Dodaj następujące klejnoty do pliku klejnotów

gem 'therubyracer'
gem 'execjs'

i biegnij

bundle install

skończyłeś :)


6

W przypadku Amazon Linux (AMI):

sudo yum install nodejs npm --enablerepo=epel

1
Dzięki, powinno być na wyższym poziomie
David Mauricio

było to niezbędne, aby wdrożenie Capistrano działało na standardowej dystrybucji Linuksa AWS.
jjk


4

Miałem ten sam błąd, ale tylko na moim serwerze pomostowym, a nie w moim środowisku produkcyjnym. nodejs został już zainstalowany w obu środowiskach.

Wpisując:

which node

Dowiedziałem się, że polecenie node znajdowało się w: / usr / bin / node na produkcji, ale: / usr / local / bin / node na etapie przemieszczania.

Po utworzeniu dowiązania symbolicznego podczas inscenizacji tj .:

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

aplikacja działała następnie w inscenizacji.

Bez problemów.


działa jak urok! Dotyczące: Potrzebowałem make dowiązaniem do nodejsrównież
Rafael Gomes Francisco

3

Nie używaj RubyRacer, ponieważ źle wpływa na pamięć. Zainstalowanie Node.js zgodnie z sugestią niektórych osób jest lepszym pomysłem.

Ta lista dostępnych środowisk uruchomieniowych, które mogą być używane przez bibliotekę ExecJs, dokumentuje również użycie Node.js

https://github.com/sstephenson/execjs

Tak więc Node.js nie jest przesadą i jest o wiele lepszym rozwiązaniem niż używanie RubyRacer.



0

Zacząłem uzyskiwać ten problem, kiedy zacząłem używać rbenv z Ruby 1.9.3, gdzie jako mój system Ruby to 1.8.7. Klejnot jest zainstalowany w obu miejscach, ale z jakiegoś powodu skrypt railsowy go nie podniósł. Ale dodawanie „execjs” i „therubyracer” do Gemfile załatwiło sprawę.


0

W swoim pliku klejnotów Odkomentuj tę linię.

19 # gem 'therubyracer', platformy:: ruby

I uruchom instalację pakietu

Jesteś gotowy do pracy :)


0

Próbując debugować w RubyMine przy użyciu Ubuntu 18.04, Ruby 2.6. *, Rails 5 i RubyMine 2019.1.1 , napotkałem ten sam problem.

Aby rozwiązać problem, odkomentowałem mini_racerlinię z mojego, Gemfilea następnie uruchomiłem bundle:

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

Zmień na:

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

0

Zainstalowałem nodeprzez nvm i napotkałem ten problem podczas wdrażania z Capistrano. Capistrano nie ładował nvm automatycznie, ponieważ działa nieinteraktywnie.

Aby to naprawić, po prostu przesuń linie, które nvm dodaje do twojego ~/.bashrc, na górę. Plik będzie wtedy wyglądał mniej więcej tak:

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.