web-dev-qa-db-fra.com

ExecJS :: RuntimeError dans Users # index (RoR)

Vient de lancer une commande "générer des utilisateurs d'échafaudage ...".

Ensuite, je vais à localhost:3000/users/ et vois ceci:

 ExecJS::RuntimeError in Users#index

Showing C:/Users/TheOnlyUser/Desktop/NMS/nms2/app/views/layouts/application.html.erb where line #6 raised:


  (in C:/Users/TheOnlyUser/Desktop/NMS/nms2/app/assets/javascripts/ads.js.coffee)

Extracted source (around line #6):

3: <head>
4:   <title>Nms2</title>
5:   <%= stylesheet_link_tag    "application", :media => "all" %>
6:   <%= javascript_include_tag "application" %>
7:   <%= csrf_meta_tags %>
8: </head>
9: <body>

Rails.root: C:/Users/TheOnlyUser/Desktop/NMS/nms2
Application Trace | Framework Trace | Full Trace

app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___753556572_43068540'
app/controllers/users_controller.rb:7:in `index'
...

Qu'est-ce que tout cela signifie?

METTRE À JOUR:

C'est sur Windows 8. Windows 7 ne donne pas ces erreurs.

31
user1837021

Mon ami tentait il y a quelques mois de suivre un didacticiel Rails sur Win 8 RTM et a rencontré cette erreur. Vous ne savez pas si ce problème existe également dans Windows 7, mais cela peut aider.

Options:

1) Supprimer //= require_tree ./Ignorer le problème - Cette ligne ne devrait pas être à l'origine d'un problème. Il y a un problème réel avec le fonctionnement correct d'ExecJS avec le moteur d'exécution JavaScript sur votre système et la suppression de cette ligne ignore simplement ce fait.

2) Installation de Node.js/Fugue - Beaucoup de personnes semblent finir par installer Node.js et l'utiliser à la place du moteur d'exécution JavaScript déjà présent sur leur système. Bien que cette option soit valide, elle nécessite également un logiciel supplémentaire et évite uniquement le problème d'origine, à savoir qu'ExecJS ne fonctionne pas correctement avec le moteur d'exécution JavaScript déjà installé sur votre système. Si le moteur d'exécution JavaScript existant sur votre système est censé fonctionner, pourquoi ne pas le faire fonctionner au lieu d'installer plus de logiciels? Selon le créateur d'ExecJS, le moteur d'exécution déjà intégré à Windows est en fait pris en charge ...

ExecJS vous permet d'exécuter du code JavaScript à partir de Ruby. Il sélectionne automatiquement le meilleur runtime disponible pour évaluer votre programme JavaScript, puis vous renvoie le résultat sous forme d'objet Ruby.

ExecJS supporte ces runtimes:

  • therubyracer - Google V8 intégré à Ruby
  • therubyrhino - Mozilla Rhino intégré à JRuby
  • Node.js
  • Apple JavaScriptCore - Inclus avec Mac OS X
  • Hôte de script Microsoft Windows (JScript)

(de github.com/sstephenson/execjs#execjs)

3) Résoudre réellement le problème/Apprentissage - Utilisez les connaissances des options 1 et 2 pour rechercher d'autres solutions. Je ne peux pas vous dire combien de pages Web que j'ai fermées après avoir vu les options 1 ou 2 étaient la solution acceptée avant de trouver des informations sur le problème fondamental que nous rencontrions. La seule raison pour laquelle nous avons continué à regarder était que nous ne pouvions pas croire que l'équipe Rails (1) insère une ligne de code dans chaque projet généré par un échafaudage qui pose problème, ou (2) nécessite l'installation de logiciels supplémentaires uniquement ligne de code. Nous avons donc finalement trouvé une solution à notre problème fondamental (vos miles peuvent varier).

Le correctif qui a fonctionné pour nous: Sur le système ayant des problèmes, recherchez le fichier runtimes.rb d'ExecJS. Cela ressemble à ceci . Faites une copie du fichier trouvé pour la sauvegarde. Ouvrez le fichier runtimes.rb d'origine pour le modifier. Recherchez la section qui commence par la ligne JScript = ExternalRuntime.new(. Dans cette section, sur la ligne contenant :command => "cscript //E:jscript //Nologo //U", - supprimez le //U uniquement. Ensuite, sur la ligne contenant :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE - changez UTF-16LE en UTF-8. Enregistrez les modifications dans le fichier. Cette section du fichier devrait maintenant se lire:

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
)

Ensuite, arrêtez puis redémarrez votre serveur Rails et actualisez la page de votre navigateur qui a généré l’erreur initiale. Espérons que la page se charge sans erreur maintenant. Voici le fil de discussion d’ExecJS où nous avons initialement publié nos résultats: https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

Si cela ne résout pas le problème, vous pouvez toujours écraser le fichier runtimes.rb modifié avec la copie de sauvegarde que vous avez créée (espérons-le) et tout reviendra à la case départ. Dans ce cas, considérez l'option 3 et continuez à chercher. Dites-nous ce qui fonctionnera éventuellement pour vous. À moins que ce ne soit pour supprimer le require_tree ou pour installer node.js, il y a déjà beaucoup de choses qui circulent déjà. :)

82
Kevin P

Comme l'ont dit les commentateurs, il vous manque probablement un joyau. Essayez d’ajouter ce qui suit à votre fichier gem:

gem 'therubyracer'

Et lancez bundle install

4
agmcleod

L’édition de runtimes.rb a résolu le problème sous Win 8.1.

2
user3122977

Au départ, je suis allé chercher la solution 3 ci-dessus de Kevin P et tout fonctionnait bien sur ma machine Windows 8.

Après une mise à jour de MS hier soir (19/08/13), je ne pouvais même pas rendre la page d'accueil dans mon application Rails.

J'ai installé node.js et cela a fonctionné, j'utilise donc la solution 2 maintenant.

2
JanuskaE

Le moyen le plus rapide de résoudre le problème consiste à installer le fichier Node.js. Ruby le détecterait automatiquement et vous n’auriez plus d’erreurs d’exécution JS

1
Hammad Siddiqui

J'ai eu le même problème et la solution 3 de Kevin P a fonctionné pour moi (modification du fichier runtimes.rb).
Ma configuration au moment de l'application de la solution est la suivante:
OS: Windows 8.1
version Ruby: 1.9.3p484
version de Rails: 3.2.14

0
user1682341

Le moyen le plus rapide pour résoudre ce problème était le suivant:

gemme 'therubyracer', '0,12.1'

mise à jour de paquet 

installation groupée

J'espère que cela aidera. 

0
user3553117

fichier runtimes.rb

 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
    )

Travailler sous Windows 8.1

0
user2943905