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?

srboisvert
źródł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
eldewall
źródło
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.

Vincent Jacquel
źródło
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 :)

manish nautiyal
źródło
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 .

jwfearn
źródło
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
JDutil
źródło
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.

moschops
źródło
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ś :)

Ramiz Raja
źródło
6

W przypadku Amazon Linux (AMI):

sudo yum install nodejs npm --enablerepo=epel
William Hu
źródło
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

Kiedyś dodawałem Ruby Racer do pliku Gem, aby to naprawić. Ale hej, Node.js działa!

Richard Zhang
źródło
jak dodajesz nodejs do gemfile? Nie znalazłem klejnotu Nodejsa.
Papouche Guinslyzinho
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.

Sean
źródło
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.

Nerw
źródło
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ę.

arangamani
źródło
0

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

19 # gem 'therubyracer', platformy:: ruby

I uruchom instalację pakietu

Jesteś gotowy do pracy :)

Sandeep Roniyaar
źródło
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
CommandZ
źródło
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
Kevin Cooper
źródło