execJs: 'JavaScript-Laufzeit konnte nicht gefunden werden', aber execjs AND therubyracer befinden sich in Gemfile

191

Ich erhalte diesen Fehler:

Rechen abgebrochen! JavaScript-Laufzeit konnte nicht gefunden werden. Siehe https://github.com/sstephenson/execjs ,

Ich habe bereits mehr Stunden damit verbracht, Google zu durchsuchen, als ich zugeben möchte. Ich glaube, das ist ein ExecJs-Bug.

Von allen Beiträgen ist dies ein sehr häufiges Problem bei Schienen 3.1. Eine js-Laufzeit wird jetzt von Standardedelsteinen wie Kaffeeskript und Sass benötigt.

Die meisten dieser Fälle wurden gelöst, indem die Gems 'execjs' und 'therubyracer' zur App Gemfile hinzugefügt und dann 'Bundle Update' und / oder 'Bundle Install' ausgeführt wurden. Aber nicht für mich.

Ich glaube, ich hatte Glück. Ich verwende Rails 3.1.3 / Ruby 1.9 auf einer alten Version von Redhat Linux 4 (2.6.9-101.ELsmp) und gcc ist 3.4.6.

Andere gemeldete Fixes helfen nicht, ich kann 'nodejs', 'johnson' oder 'mustang' nicht installieren, die anderen Laufzeit-ExecJs sollen sie finden und verwenden. Sie werden nicht auf meinem System erstellt / installiert.

Ich muss das Problem beheben, das dazu führt, dass ExecJs 'therubyracer' nicht finden. Hier ist die Gemfile (und die Bundle-Installation sagt Ok):

source 'http://rubygems.org'

gem 'rails', '3.1.3'
gem 'sqlite3'
gem 'sho-mongrel'

gem 'execjs'
gem 'therubyracer'
#gem "therubyracer", :require => 'v8'

group :assets do
  gem 'sass-rails',   '~> 3.1.5'
  gem 'coffee-rails', '~> 3.1.1'
  gem 'uglifier', '>= 1.0.3'
end

Und hier ist eine Spur:

~/rails/316-private-pub/chatter-after>rake db:create --trace
rake aborted!
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect'
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:5:in `<module:ExecJS>'
/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:4:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
/home/vitalarthur/rails/316-private-pub/chatter-after/config/application.rb:7:in `<top (required)>'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/home/vitalarthur/rails/316-private-pub/chatter-after/Rakefile:5:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block in run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/usr/local/bin/rake:19:in `load'
/usr/local/bin/rake:19:in `<main>'

Das Entwicklungsprotokoll enthält nichts Interessantes.

Hier ist das Ausführungsverzeichnis:

/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs>ls
disabled_runtime.rb  module.rb              ruby_rhino_runtime.rb  version.rb
external_runtime.rb  mustang_runtime.rb     runtimes.rb
johnson_runtime.rb   ruby_racer_runtime.rb  

Ich habe auch execjs-1.2.13 ausprobiert. Gleiches Problem.

Wenn ich unten execjs.rb kommentiere, kann ich Rake ohne den Fehler ausführen:

require "execjs/module"
require "execjs/runtimes"

module ExecJS
  self.runtime #||= Runtimes.autodetect
end

Aber dann bekomme ich keine Laufzeit.

Ich kann in runtimes.rb sehen, woher der Fehlertext kommt:

def self.autodetect
  from_environment || best_available ||
    raise(RuntimeUnavailable, "Could not find a JavaScript runtime. " +
      "See https://github.com/sstephenson/execjs for a list of available runtimes.")
end

Die Frage ist also, warum ich runtimes.rb nicht finden kann, da ich 'therubyracer' installiert habe. Ist execJs kaputt?

Hier ist es 'therubyracer':

/usr/local/lib/ruby/gems/1.9.1/gems/therubyracer-0.9.9

Wie kann ich das beheben?

steve98177
quelle

Antworten:

346

Ubuntu-Benutzer:

Ich hatte das gleiche Problem und habe es behoben, indem nodejsich es unabhängig vom Juwel auf meinem System installiert habe.

auf Ubuntu ist es: sudo apt-get install nodejs

Ich benutze 64bit Ubuntu 11.10

Update: Aus der Antwort von @Galina unten schätze ich, dass die neueste Version von nodejs erforderlich ist. @ steve98177 Ihre beste Option für eine Redhat- (oder CentOS-) Box ist die Installation aus dem Quellcode wie @Galina, aber wie Sie Kannst du auf dieser Box nicht "machen / installieren"? Ich schlage vor, du versuchst, eine Fedora-Drehzahl (Long Shot) zu installieren. https://github.com/joyent/node/wiki/Installing-Node.js-via-package- Manager oder finden Sie eine andere RH / CentOs-Box (die Sie "machen" können) und erstellen Sie Ihre eigene Drehzahl und installieren Sie sie auf der originalen RH-Box (wenn die alte Glibc auf RH gut funktioniert).

Das eigentliche Problem hier (IMHO) ist die Installation von Gems, die Abhängigkeiten von installierten Paketen außerhalb der Ruby-Umgebung aufweisen. Gibt es eine Möglichkeit, dies vor der Installation zu wissen? ein RFI für Gems oder Bundler?


CentOS / RedHat-Benutzer:

sudo yum install nodejs
Paul Williams
quelle
1
auf ubuntu musste ich sudo apt-get update und dann funktionierte nodejs install.
Vineet Bhatia
Ich hatte das gleiche Problem auf meinem Ubuntu 12.04-32 Bit mit Ruby 1.9.3p392, Rails 3.2.3, Gem 1.8.25. Beim Ausführen von "script / Rails Console" und "Script / Rails Server" wurde der gleiche Fehler angezeigt. sudo apt-get install nodejslöste mein Problem.
Ajin6747
Muss es aber Node sein? Ich bin mir ziemlich sicher, dass Sie andere wie Therubyracer, Therubyrhino oder Apple JavaScriptCore verwenden können. Ich weiß, dass ExecJS sie unterstützt. github.com/sstephenson/execjs
Dustin Griffith
Der Versuch, eine der von execjs unterstützten alternativen Laufzeiten zu installieren, brachte mich nicht weiter. In der Tat hat die Installation von nodejs funktioniert. Weit davon entfernt, ideal zu sein, aber es bringt Sie an der Post vorbei.
Mitch Kent
Ich benutze Ubuntu 14.04. Problem nach der Installation von nodejs behoben.
Charles Wu
108

Fügen Sie in Ihrer Gemfile Folgendes hinzu:

gem 'execjs'
gem 'therubyracer', :platforms => :ruby

Für weitere Details: ExecJS und konnte keine JavaScript-Laufzeit finden

Tiago
quelle
1
Danke, aber das funktioniert nicht. Schauen Sie sich diesen Versuch an, Rubyrhino von Execjs erkennen zu lassen: gem which rhino /usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
steve98177
Hat auch für mich funktioniert, ein Hinweis für Rails-Anfänger wie mich: Die Gemfile befindet sich im Projektordner.
McSas
1
Für diejenigen unter Ihnen, für die dies nicht funktioniert hat: Versuchen Sie gem install therubyracerzuerst zu laufen .
Maksimov
Für alle anderen, die dieses Problem hatten, installierte ich das schneidige Projekt von Shopify auf einem CentOS 5.8-System und stieß auf das Laufzeitproblem von execjs. Ich habe dies zu meinem hinzugefügt Gemfileund es hat funktioniert.
Casey
Ok, es funktioniert, gut. Aber warum müssen wir das tun? Jedes Mal, wenn ich meiner Gemfile eine Zeile hinzufüge, muss dies für persönliche Projekte wirklich sinnvoll sein, und für Teamprojekte ist es noch schmutziger, dies zu tun, da dies Auswirkungen auf die Maschinen anderer hat, während das Problem umgebungsspezifisch war. IMHO ist das auf lange Sicht keine sehr anständige Lösung.
Augustin Riedinger
13

Wenn Sie ein leeres Projekt erstellen, wird diese Zeile in Gemfile kommentiert. Einfach auskommentieren und bündeln!

gem 'therubyracer', :platforms => :ruby
Santhosh
quelle
2
... und bündeln! Dies ist bei weitem die einfachste Antwort.
Etusm
4

Ich benutze Ubuntu 11.10-32 Bit mit Ruby 1.9.3p194, Rails 3.2.3, Gem 1.8.24. Erhielt den gleichen Javascript-Fehler beim Ausführen von "script / Rails Console".

Ein "sudo apt-get install nodejs" löste jedoch mein Problem.

Vibin B. Nair
quelle
4

Fedora-Benutzer können aufgrund schwerwiegender Namens- und Dateipositionierungskonflikte, die verhindern, dass dieses Paket überhaupt über die Fedora-Repositorys verfügbar ist, KEINE einfachen "yum install nodejs" ausführen.

Es gibt anscheinend mindestens ein alternatives Repository mit einem alternativen Build, das möglicherweise funktioniert, aber das sind zwei zu viele "Alternativen", als dass ich bereit wäre, es zu verwenden - ich suche nach einer anderen Alternative.

Matt Heck
quelle
Dies mag zu der Zeit gut gewesen sein, aber es funktioniert jetzt gut (Dezember 2015)
Mitch Kent
4

Wenn Sie auf Ubuntu waren $ sudo apt-get install nodejs

Versuchen Sie, keine anderen Systeme wie Windows für die Entwicklung zu verwenden. Denken Sie, dass fast alle Server auf der Welt Linux-Server sind. Wenn Sie also versuchen, diese Anwendung bereitzustellen, ist es einfacher, wenn Sie diese auch in einer Linux- oder Unix-Umgebung entwickelt haben.

Julian Arango López
quelle
3

Ich hatte das gleiche Problem auf einem Staging-Server. Ich hatte keine Probleme beim Ausführen von Rake-Tasks auf meinem lokalen Entwicklungscomputer, aber die Bereitstellung auf dem Staging-Server schlug mit der Fehlermeldung "JavaScript-Laufzeit konnte nicht gefunden werden" fehl, während versucht wurde, die Assets auszuführen : Vorkompilieren Rakes-Task " .

Natürlich befanden sich Therubyracer und Execjs in meiner Gemfile, und ich verwendete die neuesten Versionen. Meine Gemfile.lock-Dateien stimmten überein, und ich überprüfte die Versionen weiter, indem ich die Bundle-Show ausführte .

Nachdem ich mich bei Google umgesehen hatte, löschte ich alle meine Edelsteine ​​und installierte sie neu wodurch das Problem behoben wurde. Ich weiß immer noch nicht, was die Grundursache war, aber vielleicht hilft Ihnen das.

So sieht meine Umgebung übrigens aus:

Ubuntu 10.04.3 LTS
rbenv
Ruby 1.9.2-p290
bundler-1.0.21
execjs-1.3.0
therubyracer-0.9.9
TheSpend
quelle
Ich habe dieses Problem auf Ubuntu 10.04. Ich hätte nicht gedacht, dass es sich lohnt, mit Ubuntu 12.04 zu arbeiten, aber ich denke, das ist es! Ich denke also, in meinem Fall ist das Problem, dass ich meinen Rubin (1.9.3, 1.9.2) zu oft kompiliert und neu kompiliert habe. Ich kompiliere es erneut, um zu sehen, ob dies das Problem behebt. Oh, und ich aktualisiere mein apt-get auf den neuesten Stand.
Victor Pudeyev
3

Ich hatte das gleiche Problem. Das Hinzufügen der Edelsteine ​​'execjs' und 'therubyracer' funktioniert bei mir nicht. apt-get install nodejs - funktioniert auch nicht. Ich benutze 64bit Ubuntu 10.04.

Aber es hat mir Folgendes geholfen: 1. Ich habe einen leeren Ordner erstellt (zum Beispiel "Java"). 2. Von dem Terminal in dem Ordner, den ich erstellt habe, mache ich:

$ git clone git://github.com/ry/node.git
$ cd node
$ ./configure
$ make
$ sudo make install

Danach starte ich wie gewohnt "bundle install" (aus Ordner mit Ruby & Rails Projekt). Und das Problem wurde gelöst. Ruby musste nicht neu installiert werden.

Galina
quelle
Jeder, der dies jetzt versucht, wird eine Fehlermeldung erhalten. Bitte versuchen Sie, git Klon github.com/nodejs/node
Yeasin Ar Rahman
2

Ich hatte dies auf meinem Windows-Computer, stellte sich heraus, dass das Problem ganz anders war. Ich hatte versehentlich einige Pfade aus meiner %PATH%Variablen entfernt. Durch einfaches Neustarten der Eingabeaufforderung wurde das Problem behoben. Es scheint, als ob sich in einem dieser fehlenden Pfade eine JS-Laufzeit befand.

Godwin
quelle
i passieren auch einige Weg von meinem Windows - Rechner entfernt haben, würden Sie erwähnen , wie haben Sie die js Pfad hinzugefügt
Hussain Akhtar Wahid Ghouri '
@HussainAkhtarWahid, ich habe meine Autoexec oder ähnliches nicht überschrieben, also musste ich nur meine cmd-Sitzung schließen und sie erneut öffnen.
Godwin
Gut gemacht, Sir, dies war mein Problem, nachdem ich versucht hatte, alles
einzurichten,
2

Ich habe mir mit diesem Fehler einige Male die Haare ausgezogen. Ich habe es geschafft, es irgendwann verschwinden zu lassen, indem ich Apache / Nginx neu gestartet habe.

Also habe ich es auf die gleiche Weise wie oben behoben, indem ich der GEM-Datei Folgendes hinzugefügt habe:

gem 'execjs'
gem 'therubyracer', :platforms => :ruby

und dann habe ich meine gemfile.lock-Datei gelöscht und dann "bundle install" erneut ausgeführt. Ich fand erst dann, dass "Bundle-Installation" tatsächlich die richtigen Bibliotheken usw. installiert hat.

LorneCurrie
quelle
1

Unter Ubuntu musste ich sudo apt-get updateund dann funktionierte die NodeJS-Installation.

kilombo1
quelle
1

Wenn ich Rails G Controller generiere, habe ich den gleichen Fehler erhalten. Danach, als die folgenden Änderungen an Gemfile (in Schienen 4) vorgenommen wurden, verlief alles reibungslos. Die Änderungen, die ich vorgenommen habe, waren

gem 'execjs'
gem 'therubyracer', "0.11.4"
Danach kann ich den Server ausführen und alle grundlegenden Operationen an der Anwendung ausführen.

Madhan Ayyasamy
quelle
0

füge deine gemfile hinzu, die sich in dem von dir erstellten Ordner befindet: gem 'execjs' gem 'therubyracer'

Vishnu Harish
quelle
0

In meinem Fall hat das Ausführen des bundleBefehls den Trick getan. Ich vertraue darauf, dass sie sich dann finden.

Javabeangrinder
quelle
0

Ich hatte dieses Problem bei der Verwendung von RubyMine (6.3.3). Eines Tages habe ich versucht, meinen Code auszuführen, aber er hat nicht funktioniert und sich darüber beschwert, dass keine JavaScript-Laufzeit gefunden wurde. Ich konnte aber rennen rails s. Das Update für mich war das Erstellen einer neuen Run-Konfiguration. Scheint wirklich bizarr, dass die Run-Konfiguration beschädigt werden würde.

Jack
quelle