ExecJS::RuntimeError bei require_tree

Dieser Artikel wurde von Do, Hoang Viet am Dienstag, 18. Dezember 2012 verfasst. Aktualisiert: 28.01.2014 18:53:06

Einige Rubyenwtickler, die unter Windows 8 mit Ruby on Rails entwickeln, werden beim Ausführen des Testservers mit der ExecJS::Runtime Exception begrüßt. Wie es dazu kommt und wie es behoben wird, zeigen wir in diesem Artikel.

Lösungsansätze

Im Grunde sagt es - mehr oder weniger :) - nur aus, dass es Probleme mit dem Scriptinterpreter unter Windows 8 hat. Beachtet bitte, dass Windows 8 sehr wohl eines von Haus aus mitliefert, der auch funktioniert! ExecJS kann anscheinend nur nix damit anfangen oder

Lösung 0: require_tree löschen

Eine nicht elegante und auch nicht zuempfehlende Lösung, die im Netz kursiert ist das Löschen der Zeile

//= require_tree

aus der application.js im app/assets/javascript Ordner.

require_tree bindet alle JavaScript-/CoffeeScript-Dateien im aktuellen Ordner mit ein. Darunter zählen auch die zu den Controller-zugehörigen Dateien. Wenn ihr also die Zeile löscht, vernichtet ihr eine Trennungsmöglichkeit zwischen HTML und JavaScript in Rails.

Lösung 1: NodeJS

Die einfachste und schnellste Lösung ist es NodeJS zu installieren. Windows 8 neuzustarten. Anschließend sollte es funktionieren. Achtung mit dem neuen "Schnelles Herunterfahren" von Windows 8, reicht es nicht aus, den PC herunterzufahren und anschließend zu starten. Ihr müsst explizit auf "Restart" klicken.

NodeJS könnt ihr hier runterladen: externe Link

Lösung 2: ExecJS rekonfigurieren

Eine 3. Möglichkeit ohne NodeJS zu installieren ist, ExecJS zu rekonigurieren. Der Fehler lässt sich anscheinend beheben, wenn ihr die eingestellte Encodierung, die ExecJS von CScript, dem Scriptinterpreter von Windows, umstellt.

Hierzu müsst ihr in den den Programmordner von Ruby gehen und die Datei

runtimes.rb

im Ordner

%Ruby%\lib\ruby\gems\1.9.1\gems\execjs-1.4.0\lib\execjs

öffnen. Die Versionsnummer kann jetzt etwas varieren. Sucht in der Datei nach dem Abschnitt

JScript = ExternalRuntime.new(
      :name        => "JScript",
      :command     => "cscript //E:jscript //Nologo //U",
      :runner_path => ExecJS.root + "/support/jscript_runner.js",
      :encoding    => 'UTF-16LE' # CScript with //U returns UTF-16LE
)

 und ändert die Letzte Zeile von UTF-16LE zu UTF-8

JScript = ExternalRuntime.new(
      :name        => "JScript",
      :command     => "cscript //E:jscript //Nologo",
      :runner_path => ExecJS.root + "/support/jscript_runner.js",
      :encoding    => 'UTF-8' # CScript with //U returns UTF-16LE
)

Bei :command muss auch das //U am Ende entfernt werden!

[Quelle: https://github.com/sstephenson/execjs/issues/81]

Weiterführende Literatur:

  • StackOverflow: "ExecJS::RuntimeError on windows 7 trying to follow rubytutorial" ( externe Link)
  • CSCRIPT.EXE doesn't work out-of-the-box on Windows 8 Consumer Preview (externe Link)
 
blog comments powered by Disqus

Google Anzeigen

Neusten Blogeinträgen

  • CSS: Animationen

    CSS3 bietet von Haus aus Möglichkeiten zur Definition von Animationen über die Property animation. Wie es funktioniert zeigen wir in diesem Artikel.

  • CSS: Alternierende Tabellenzeilen

    Um die Lesbarkeit von Tabellen zu steigern, bietet die CSS die Möglichkeit Tabellenzeilen alternierend zu färben. Wie das funktioniert zeigen, wir ...

  • Unity3D: Konsolenausgabe formatieren

    Die Unitykonsole ist einer der meistgenutzten Feature wenn es bei Unity um Fehlersuche und -behandlung geht. Sie wird dabei schnell voll und verli ...

  • Unity3D: Singleton für langsame Operationen

    Operationen wie Object.FindObjectOfType werden in der Dokumentation von Unity3D Entwickler selbst als sehr langsam beschrieben. Aus dem Grund wird ...

  • Unity3D: Optionale Parameter

    Unity3D (4.3.1) unterstützt keine optionale Parameter, wenn die betroffene Skriptdatei in einem Namespace definiert wird.

Popular Threads

Share it on your network