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.