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?


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

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.


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 :)


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 .


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

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.


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 :)


6

Für Amazon Linux (AMI):

sudo yum install nodejs npm --enablerepo=epel

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 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.


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.



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.


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. :) :)


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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.