ExecJS und konnte keine JavaScript-Laufzeit finden

403

Ich versuche, die Vorlage Mongoid / Devise Rails 3.1 ( Mongoid und Devise ) zu verwenden, und es wird immer wieder die Fehlermeldung angezeigt, dass ExecJS keine JavaScript-Laufzeit finden kann. Fair genug, wenn ich keine installiert hatte, aber ich habe versucht, Node.js , Mustang und den Ruby Racer zu installieren , aber nichts funktioniert.

Ich konnte keine JavaScript-Laufzeit finden. Eine Liste der verfügbaren Laufzeiten ( ) finden Sie unter sstephenson / ExecJS (GitHub ExecJS::RuntimeUnavailable).

Was muss ich tun, damit das funktioniert?

srboisvert
quelle
4
Übrigens - ich benutze Ubuntu Karmic.
Srboisvert
Sie sollten wirklich überlegen, die Antwort zu ändern. Die Antwort von Node.js ist bei weitem nicht so gut wie die von execjs / rubyracer.
Sean Dunford
3
Der Rubinracer hat andere Probleme damit. Heroku empfiehlt nicht mehr, es in Ihre Gemfile aufzunehmen, wenn Sie es vermeiden können. devcenter.heroku.com/articles/rails-asset-pipeline#therubyracer Ich denke, dass die Installation einer korrekten Javascript-Laufzeit unter Ubuntu die richtige Antwort auf diese Frage ist.
M. Scott Ford

Antworten:

436

Ubuntu-Benutzer

Ich bin auf Ubuntu 11.04 und hatte ähnliche Probleme. Die Installation von Node.js hat das Problem behoben.

Ab Ubuntu 13.04 x64 müssen Sie nur noch Folgendes ausführen:

sudo apt-get install nodejs

Dies wird das Problem lösen.


CentOS / RedHat-Benutzer

sudo yum install nodejs
Eldwall
quelle
1
Ich habe es versucht. kein Glück. Ich frage mich, ob es sich um einen RVM-Konflikt handelt oder so. Alles, was andere Leute vorgeschlagen haben, hat bei mir nicht funktioniert.
Srboisvert
76
gem 'execjs' gem 'therubyracer' ist eine bessere lösung als diese.
Dwaynemac
26
Heroku rät Therubyracer aufgrund der Speichernutzung jetzt stark ab . Ich habe NodeJS gemäß dieser Antwort auf meinem Entwicklungscomputer installiert und Therubyracer aus meiner Gemfile entfernt. Siehe auch stackoverflow.com/questions/7092107/… .
Mark Berry
11
@dwaynemac Ich bin anderer Meinung. Ich würde es vorziehen, wenn die Laufzeit als Betriebssystembibliothek existiert (wie standardmäßig bei Mac und Windows), anstatt der Abhängigkeitsliste ein weiteres Juwel hinzuzufügen.
William Denniss
1
Es scheint, dass Therubyracer und Execjs Probleme mit der Heroku-Bereitstellung verursachen, es sei denn, es gibt etwas anderes, das geändert wurde und das ich verpasst habe. Dies ist die bevorzugte Lösung.
Sturm
445

Fügen Sie einfach ExecJS und den Ruby Racer in Ihre Gem- Datei ein und führen Sie sie bundle installaus.

gem 'execjs'

gem 'therubyracer'

Danach sollte alles in Ordnung sein.

Vincent Jacquel
quelle
6
Dies funktionierte für mich, Rails 3.1rc4 und Ubuntu 11.04 (mein erster Versuch mit Rails 3.1). Ich habe versucht, ein Gerüst zu erstellen, als ich den Fehler bekam. Immer noch ziemlich lahm, dass Rails 3.1 sofort "kaputt" ist.
wundervoller
35
Für Rails 3.1 RC 6 müssen Sie nurgem 'therubyracer'
Amree
5
Gibt es überhaupt eine Möglichkeit, diese Edelsteine ​​in die Standard-Gemfile aufzunehmen, wenn eine neue Anwendung erstellt wird?
Richard Fawcett
2
Dies ist eine bessere Lösung als die Installation von node.js. Wenn Sie auf einem Remote-Server bereitstellen oder die App für andere Entwickler freigeben, ist es viel schmerzhafter, wenn jeder node.js installiert, als nur die Bundle-Installation auszuführen, was er sowieso tun würde.
jdkealy
19
Heroku rät Therubyracer aufgrund der Speichernutzung jetzt stark ab . Ich habe nodejs auf meinem Entwicklungscomputer ( github.com/joyent/node/wiki/… ) installiert und therubyracer aus meiner Gemfile entfernt. Siehe auch stackoverflow.com/questions/7092107/… .
Mark Berry
77

Schreiben Sie in Ihre Gem-Datei

gem 'execjs'
gem 'therubyracer'

und dann laufen

bundle install

Alles funktioniert gut für mich :)

manish nautiyal
quelle
9
Sie müssen nicht 'execjs' hinzufügen
miguelSantirso
Ja, du hast Recht in Schienen 3.2.1. Du musst nur gem'therubyracer 'verwenden
manish nautiyal
Danke @manish nautiyal und @ Peter Mortensen. es funktioniert für mich
Ravindra
48

Ich hatte ein ähnliches Problem: Meine Rails 3.1-App funktionierte unter Windows einwandfrei, erhielt jedoch unter Linux den gleichen Fehler wie das OP. Das Update, das für mich auf beiden Plattformen funktioniert hat, bestand darin, Folgendes zu meinem hinzuzufügen Gemfile:

gem 'therubyracer', :platforms => :ruby

Der Trick ist zu wissen, dass das :platforms => :rubytatsächlich bedeutet , dieses Juwel nur mit "C Ruby (MRI) oder Rubinius, aber NICHT mit Windows" zu verwenden.

Weitere mögliche Werte für :platformssind in der bundlerManpage beschrieben .

Zu Ihrer Information: Windows verfügt über eine integrierte JavaScript-Engine, die gefunden werden execjskann. Unter Linux gibt es kein eingebautes System, obwohl mehrere verfügbar sind, die installiert werden können. therubyracerIst einer von ihnen. Andere sind in der execjs README.md aufgeführt .

jwfearn
quelle
Danke, dieser hat es für mich unter Ubuntu Oneiric mit der RVM-Installation von Ruby 1.9.3 und Rails 3.2.1
Yashima
Vielen Dank, mein Herr!
DaTroop
Ich bin auf einem CentOS-Server mit installierter node.js auf den Fehler gestoßen. Das hat mich daran vorbei gebracht. Vielen Dank!
Ncherro
36

Das Hinzufügen des folgenden Edelsteins zu meiner Gemfile hat das Problem behoben:

gem 'therubyracer'

Dann bündeln Sie Ihre neuen Abhängigkeiten:

$ bundle install
JDutil
quelle
füge auch gem 'execjs' in Gemfile hinzu
Bijendra
6
execjs ist bereits jetzt in Rails enthalten. Es war nur auch während der Release-Kandidaten erforderlich.
JDutil
16

Eine alternative Möglichkeit besteht darin, einfach ohne die Edelsteingruppe zu bündeln, die die Dinge enthält, die Sie nicht haben.

Dann mach's:

bundle install --without assets

Sie müssen das Gemfile überhaupt nicht ändern, vorausgesetzt natürlich, Sie erledigen keine Asset-Chain-Aufgaben - was normalerweise in Umgebungen ohne Entwicklung gilt. Bundle speichert Ihre Einstellung "--without" in der .bundle / config-Datei.

Moschops
quelle
Beste Antwort. Arbeitete für Schienen Version 3.2.3
Frantzdy Romain
1
Das ist großartig und eine so einfache Lösung. Die Heroku-Site sagt, dass RubyRacer nicht mehr benötigt wird (mit Cedar Stack), daher war ich verwirrt darüber, warum mein Programm plötzlich nicht mehr lokal ausgeführt wurde. Das hat den Trick gemacht.
Mike Blyth
6

Fügen Sie Ihrer Edelsteindatei folgende Edelsteine ​​hinzu

gem 'therubyracer'
gem 'execjs'

und Renn

bundle install

du bist fertig :)

Ramiz Raja
quelle
6

Für Amazon Linux (AMI):

sudo yum install nodejs npm --enablerepo=epel
William Hu
quelle
1
Danke, das sollte auf einem höheren Level sein
David Mauricio
Dies war wichtig, damit eine Capistrano-Bereitstellung unter der AWS-Standard-Linux-Distribution funktioniert.
JJK
4

Ich habe den Ruby Racer zur Gem-Datei hinzugefügt, um das Problem zu beheben. Aber hey, Node.js funktioniert!

Richard Zhang
quelle
Wie fügt man NodeJS zur Gemfile hinzu? Ich habe kein Juwel gefunden.
Papouche Guinslyzinho
4

Ich hatte denselben Fehler, aber nur auf meinem Staging-Server, nicht in meiner Produktionsumgebung. nodejs wurde bereits in beiden Umgebungen installiert.

Durch Eingabe von:

which node

Ich fand heraus, dass sich der Knotenbefehl in: / usr / bin / node in der Produktion befand, aber: / usr / local / bin / node in Staging.

Nach dem Erstellen eines Symlinks beim Staging, dh:

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

Die Anwendung arbeitete dann in der Inszenierung.

Kein Muss, keine Aufregung.

Sean
quelle
funktioniert wie Charme! Ein Tipp: Ich brauche Make Symlink für nodejsauch
Rafael Gomes Francisco
3

Verwenden Sie RubyRacer nicht, da der Speicher schlecht ist. Die Installation von Node.js, wie von einigen Leuten hier vorgeschlagen, ist eine bessere Idee.

Diese Liste der verfügbaren Laufzeiten, die von der ExecJs-Bibliothek verwendet werden können, dokumentiert auch die Verwendung von Node.js.

https://github.com/sstephenson/execjs

Node.js ist also kein Overkill und eine viel bessere Lösung als die Verwendung des RubyRacer.

Nerv
quelle
0

Ich bekam dieses Problem, als ich anfing, rbenv mit Ruby 1.9.3 zu verwenden, wobei mein System Ruby 1.8.7 ist. Das Juwel ist an beiden Stellen installiert, aber aus irgendeinem Grund hat das Rails-Skript es nicht aufgenommen. Aber das Hinzufügen der "execjs" und "therubyracer" zur Gemfile hat den Trick getan.

Arangamani
quelle
0

Kommentieren Sie diese Zeile in Ihrer Edelsteindatei aus.

19 # gem 'therubyracer', Plattformen :: rubin

Führen Sie die Bundle-Installation aus

Sie sind bereit zu arbeiten. :) :)

Sandeep Roniyaar
quelle
0

Versuch, in RubyMine mit Ubuntu 18.04, Ruby 2.6. *, Rails 5 und RubyMine 2019.1.1 zu debuggen , stieß ich auf dasselbe Problem.

Um das Problem zu beheben, habe ich die mini_racerZeile aus meiner entfernt Gemfileund dann ausgeführt bundle:

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

Ändern:

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

Ich habe nodeüber nvm installiert und bin bei der Bereitstellung mit Capistrano auf dieses Problem gestoßen. Capistrano hat nvm nicht automatisch geladen, da es nicht interaktiv ausgeführt wird.

Um dies zu beheben, verschieben Sie einfach die Zeilen, die nvm zu Ihrem hinzugefügt hat ~/.bashrc, nach oben. Die Datei sieht dann ungefähr so ​​aus:

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
quelle