31 votes

ExecJS :: RuntimeError dans Users # index (RoR)

Je viens d'exécuter 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?

MISE À JOUR:

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

83voto

Kevin P Points 2546

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

Options:

1) l'élimination //= require_tree . / Ignorer le problème - Cette ligne ne devrait pas être à l'origine d'un problème en premier lieu. Il y a un réel problème avec ExecJS fonctionne correctement avec le runtime JavaScript dans votre système et les supprimer cette ligne est juste ignorer ce fait.

2) l'Installation de Node.js de Course ou de loin - Beaucoup de gens semblent juste la fin de l'installation Node.js et en l'utilisant à la place de la runtime JavaScript déjà sur leur système. Alors que c'est une option valable, il faut aussi un logiciel supplémentaire et qu'elle évite le problème d'origine, qui est que ExecJS ne fonctionne pas correctement avec le runtime JavaScript déjà sur votre système. Si le code JavaScript d'exécution sur votre système est censé fonctionner, pourquoi ne pas faire le travail au lieu d'installer un autre logiciel? Selon le ExecJS créateur, le moteur d'exécution déjà intégré dans Windows est en fait pris en charge...

ExecJS vous permet d'exécuter du code JavaScript à partir de Ruby. Il choisit automatiquement la meilleure exécution disponibles pour évaluer le JavaScript de votre programme, puis renvoie le résultat à vous comme un Rubis objet.

ExecJS prend en charge ces temps de fonctionnement:

  • therubyracer - Google V8 intégré au sein de Ruby
  • therubyrhino - Mozilla Rhino intégré au sein de JRuby
  • Node.js
  • Apple JavaScriptCore - Inclus avec Mac OS X
  • Microsoft Windows Script Host (JScript)

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

3) en Fait pour résoudre le problème / l'Apprentissage de l'Utilisation des connaissances des options 1 et 2 pour rechercher d'autres solutions. Je ne peux pas vous dire combien de pages j'ai fermé en voyant les options 1 ou 2 a été la solution retenue avant de trouver de l'information sur le problème de base que nous avions. La seule raison pour laquelle nous avons gardé la recherche était que nous ne pouvions en croire les Rails, l'équipe de (1) insérer une ligne de code dans chaque échafaudage généré projet qui a causé un problème, ou (2) nous demandent d'installer de logiciel supplémentaire juste pour exécuter cette ligne de code par défaut. Et donc, nous nous sommes finalement arrivés à un correctif pour résoudre notre problème de base (vos miles peut varier).

Le Correctif qui a fonctionné pour nous: Sur le système d'avoir des problèmes, trouver des ExecJS du temps de fonctionnement.rb fichier. Il ressemble à ceci. Faites une copie du fichier de sauvegarde. Ouvrez le fichier original runtimes.rb pour l'édition. Trouver la section qui commence avec la ligne, JScript = ExternalRuntime.new(. Dans cette section, sur la ligne contenant :command => "cscript //E:jscript //Nologo //U", - suppression de l' //U seulement. Puis sur la ligne contenant :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE - changement UTF-16LE d' UTF-8 . Enregistrer les modifications dans le fichier. Cette section du fichier doit indiquer:

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 dans votre navigateur qui a produit l'erreur d'origine. J'espère que la page se charge sans erreur maintenant. Voici la ExecJS problème de thread où nous avons posté nos résultats: https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

Si cela ne corrige pas le problème, vous pouvez toujours remplacer la modification de temps de fonctionnement.rb avec la copie de sauvegarde que vous (je l'espère) fait et tout sera revenu à la case départ. Dans ce cas, envisager l'option 3 et continuer à chercher. Laissez-nous savoir ce qui fonctionne pour vous.. sauf si c'est de retirer le require_tree ou de l'installation node.js, il ya beaucoup de qui va autour déjà. :)

4voto

agmcleod Points 4641

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

 gem 'therubyracer'
 

Et exécutez bundle install

2voto

JanuskaE Points 745

J'ai d'abord opté pour la solution 3 ci-dessus par Kevin P et tout fonctionnait bien sur ma machine Windows 8.

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

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

2voto

user3122977 Points 29

La modification de runtimes.rb a résolu le problème sur Win 8.1

1voto

Hammad Points 9

La façon la plus rapide de résoudre le problème consiste à installer Node.js. Ruby le détecterait automatiquement et vous n'aurez plus d'erreurs d'exécution JS

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X