ExecJS :: RuntimeError sous Windows essayant de suivre rubytutorial

103

MISE À JOUR: suggestion de Colin de supprimer la ligne // = require_tree. a résolu le problème.

J'ai perdu plus de 2 jours à essayer de suivre toutes les suggestions et de résoudre mon problème. J'essaie de suivre le livre http://ruby.railstutorial.org sur la machine Windows et je ne peux pas pour la vie de moi dépasser l'erreur désagréable suivante.

ExecJS::RuntimeError in Static_pages#home

Showing C:/Users/.../bootcamp-sample-app/app/views/layouts/application.html.erb where line #6 raised:

["ok","(function() {\n\n\n\n}).call(this);\n"]
(in C:/Users/.../bootcamp-sample-app/app/assets/javascripts/sessions.js.coffee)
Extracted source (around line #6):

3: <head>
4:   <title><%= full_title(yield(:title)) %></title>
5:   <%= stylesheet_link_tag    "application", media: "all" %>
6:   <%= javascript_include_tag "application" %>
7:   <%= csrf_meta_tags %>
8:   <%= render 'layouts/shim' %>
9: </head>
Rails.root: C:/Users/.../bootcamp-sample-app

Application Trace | Framework Trace | Full Trace
app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___487732698_30422172'
Request

J'ai essayé toutes les suggestions, y compris l'installation de nodejs avec le msi, l'utilisation d'execjs 1.3.0 et d'autres choses dont je ne me souviens même plus. Voici le fichier gem

source 'https://rubygems.org'

gem 'rails', '3.2.8'
gem 'bootstrap-sass', '2.0.0'
gem 'bcrypt-ruby', '3.0.1'
gem 'faker', '1.0.1'
gem 'will_paginate', '3.0.3'
gem 'bootstrap-will_paginate', '0.0.6'

group :development, :test do
  gem 'sqlite3', '1.3.5'
  gem 'rspec-rails', '2.10.0'
  gem 'guard-rspec', '0.5.5'
  gem 'guard-cucumber'
end

group :development do
  gem 'annotate', '2.5.0'
end


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails'
  gem 'coffee-rails'
  gem 'coffee-script'
  gem 'uglifier'
end

gem 'jquery-rails', '2.0.2'

gem 'execjs'

# Gems on Linus/Mac
#gem 'therubyracer'


group :test do
  gem 'capybara', '1.1.2'
  gem 'guard-spork', '0.3.2'
  gem 'spork', '0.9.0'
  gem 'factory_girl_rails', '1.4.0'
  gem 'cucumber-rails', '1.2.1', require: false
  gem 'database_cleaner', '0.7.0'


# Test gems on Linux
#  gem 'rb-inotify', '0.8.8'
#  gem 'libnotify', '0.5.9'

# Test gems on Macintosh OS X
#  gem 'selenium-webdriver', '~> 2.22.0'
#  gem 'rb-fsevent', '0.9.1', :require => false
#  gem 'growl', '1.0.3'

# Test gems on Windows
# gem 'rb-fchange', '0.0.5'
# gem 'rb-notifu', '0.0.4'
# gem 'win32console', '1.3.0'
end

group :production do
#  gem 'therubyracer'
  gem 'pg', '0.12.2'
end

# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# To use Jbuilder templates for JSON
# gem 'jbuilder'

# Use unicorn as the app server
# gem 'unicorn'

# Deploy with Capistrano
# gem 'capistrano'

# To use debugger
#gem 'debugger''

et voici les sessions.js.coffee

# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

application.js

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require_tree .
//= require bootstrap

application.html.erb

<!DOCTYPE html>
 <html>
 <head>
   <title><%= full_title(yield(:title)) %></title>
   <%= stylesheet_link_tag    "application", media: "all" %>
   <%= javascript_include_tag "application" %>
   <%= csrf_meta_tags %>
   <%= render 'layouts/shim' %>
 </head>
 <body>
 <%= render 'layouts/header' %>
 <div class="container">
   <%= yield %>
   <%= render 'layouts/footer' %>
 </div>
 </body>
 </html>

Voici le contenu de la console

Processing by StaticPagesController#home as HTML
  Rendered static_pages/home.html.erb within layouts/application (45.0ms)
Completed 500 Internal Server Error in 1136ms

ActionView::Template::Error (["ok","(function() {\n\n\n\n}).call(this);\n"]
  (in C:/Users/.../bootcamp-sample-app/app/assets/javascripts/sessions.js.coffee)):
    3: <head>
    4:   <title><%= full_title(yield(:title)) %></title>
    5:   <%= stylesheet_link_tag    "application", media: "all" %>
    6:   <%= javascript_include_tag "application" %>
    7:   <%= csrf_meta_tags %>
    8:   <%= render 'layouts/shim' %>
    9: </head>
  app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___487732698_30422172'


  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.0ms)
  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
  Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (34.0ms)

J'ai installé Devkit et j'ai essayé divers joyaux, mais veuillez suggérer des changements qui peuvent m'aider à développer sur Windows. J'ai utilisé rubyinstaller pour tout.

Qu'est-ce que je rate?

user1687078
la source
5
Pourriez - vous essayer d' enlever la ligne //= require_tree .de application.jsvoir si les erreurs persiste?
Colin R
WOW .... cela a fait l'affaire ... merci beaucoup Colin, en supprimant la ligne // = require_tree. a résolu le problème. Je ne peux pas expliquer ce qu'est un soulagement mais pouvez-vous expliquer pourquoi cette ligne est à l'origine de l'erreur?
user1687078
3
Cette ligne compile chaque .js.coffeefichier app/assets/javascriptsen JavaScript, puis l'ajoute à votre mise en page (mais uniquement en mode développement; en mode production, le js compilé est ajouté à votre application.jsfichier). Cela require_tree .ne devrait pas causer d'erreurs, vous avez donc un problème avec l'un des fichiers inclus. Pouvez-vous publier une liste de tous les fichiers de votre app/assets/javascriptsrépertoire? En outre, vous pouvez essayer de supprimer complètement le contenu sessions.js.coffeeet de le rajouter //= require_tree .et voir si l'erreur persiste.
Colin R
1
@ColinR, vous devriez ajouter ceci comme réponse à la question. J'ai eu le même problème et si je n'avais pas parcouru les commentaires, j'aurais continué à chercher une autre question.
Emmanuel F

Réponses:

242

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

Options:

1) Supprimer //= require_tree ./ ignorer le problème - Comme ColinR l'a indiqué ci-dessus, cette ligne ne devrait pas causer de problème en premier lieu. Il y a un problème réel avec ExecJS fonctionnant correctement avec le runtime JavaScript sur votre système et la suppression de cette ligne ignore tout simplement ce fait.

2) Installer Node.js / S'enfuir - Beaucoup de gens semblent finir par installer Node.js et l'utiliser au lieu du runtime JavaScript déjà sur leur système. Bien que ce soit une option 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à sur votre système. Si le runtime 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 runtime 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 moteur d'exécution disponible pour évaluer votre programme JavaScript, puis vous renvoie le résultat sous la forme d'un objet Ruby.

ExecJS prend en charge ces environnements d'exécution:

  • therubyracer - Google V8 intégré à Ruby
  • therubyrhino - Mozilla Rhino intégré dans 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 j'ai fermées en voyant les options 1 ou 2 était la solution acceptée avant de trouver des informations sur le problème racine que nous avions. La seule raison pour laquelle nous avons continué à chercher était que nous ne pouvions pas croire que l'équipe Rails (1) insérerait une ligne de code dans chaque projet généré par l'échafaudage qui causait un problème, ou (2) exigerait que nous installions un logiciel supplémentaire juste pour exécuter cette valeur par défaut. ligne de code. Nous avons donc finalement trouvé une solution à notre problème racine (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 . Ça ressemble à ça . Faites une copie du fichier trouvé pour la sauvegarde. Ouvrez le runtimes.rb d'origine pour le modifier. Trouvez 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 //Useul. Puis sur la ligne contenant :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE- changez UTF-16LE en UTF-8. Enregistrez les modifications apportées au fichier. Cette section du fichier devrait maintenant 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 produit l'erreur d'origine. Espérons que la page se charge maintenant sans erreur. Voici le fil de discussion ExecJS sur lequel 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 runtimes.rb modifié par la copie de sauvegarde que vous avez (espérons-le) faite et tout sera de retour à la case départ. Dans ce cas, considérez l'option 3 et continuez à chercher. Dites-nous ce qui fonctionne finalement pour vous .. à moins que ce ne soit la suppression de require_tree ou l'installation de node.js, il y en a déjà beaucoup. :)

Kevin P
la source
20
J'aimerais pouvoir vous donner +50 voix. Cela m'a énervé pendant trop longtemps en essayant de mettre en place therubyracer pour Windows, en réalisant qu'il n'est pas pris en charge, puis en essayant de charger ExecJS correctement. Merci d'avoir pris le temps de m'aider à apprendre et de ne pas obscurcir le problème! Pour ceux qui se demandent, vous pouvez obtenir l'emplacement du fichier runtimes.rb en tapant "gem which execjs"
Michael
4
J'ai dû lancer l'installation du bundle après avoir effectué cette modification pour que cela fonctionne. Donc, si quelqu'un essaie cette solution et que cela ne semble pas fonctionner au début, assurez-vous d'essayer cela! Je suis sous Windows 8 64 bits et cela a fonctionné pour moi! Merci
Peter Kirby
2
+1 a sauvé l'agitation de l'installation du nœud. L'option 3 fonctionne pour moi sur Windows 8 64 bits
Sami
10
Commentaire sur l'option 3: github.com/sstephenson/execjs/issues/111 dit que nous pouvons résoudre le problème simplement en passant UTF-16LEà UTF-16l' //Uoption sans supprimer . Je l'ai confirmé.
Tsutomu le
3
Je vois beaucoup de comment, mais pas beaucoup de pourquoi. Pourquoi changer ce qui ressemble à un jeu de caractères fait-il une différence uniquement sur Windows? Je suis curieux c'est tout.
NathanTempelman
14

Eu le même problème OS - Erreur Windows 8 - 'ExecJS :: RuntimeError ...' Solution - Node.js manquant

  1. installez Node.js depuis http://www.nodejs.org/download/
  2. Redémarrer le PC
snassr
la source
1
celui-ci a fonctionné pour moi. Quelqu'un ici sait-il pourquoi l'installation de node.js a fonctionné?
mpalencia le
12

J'ai eu ce problème et je réduisais Internet J'utilise Windows 8 avec ce fichier de gemmes de rails

source 'https://rubygems.org'

gem 'rails', '3.2.9'

# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'

group :development do gem 'sqlite3', '1.3.5' 
end

# Gems used only for assets and not required # in production environments by default. 

group :assets do 
    gem 'sass-rails', '3.2.5' 
    gem 'coffee-rails', '3.2.2'

gem 'uglifier', '1.2.3' 
end

gem 'jquery-rails', '2.0.2'

group :production do 
    gem 'pg', '0.12.2' 
end

Je suis allé à http://nodejs.org/download/ installé - redémarré la machine et tout a fonctionné.

gustavoanalytics
la source
J'ai installé le nœud comme suggéré, je n'ai pas besoin de redémarrer, il suffit d'ouvrir une nouvelle fenêtre cmd (je suppose que c'est pour que les nouveaux chemins soient accessibles)
Sera
5

J'ai privilégié la route d' apprentissage . Il semble que le problème vienne de

IO.popen(command, options) { |f| output = f.read }

renvoyer une chaîne vide dans execjs\external_runtine.rb(ligne 173 de la version 1.4.0). C'est pourquoi le message d'erreur ne contient aucun texte. Les changements suggérés n'ont pas fonctionné pour moi. J'ai changé UTF-16LEen UTF-8, mais il a quand même renvoyé une chaîne vide. J'ai supprimé \\Udu command- cela a au moins renvoyé du texte, mais il était dans le mauvais encodage - dans le navigateur, il s'affichait en caractères chinois.

Selon ce billet de blog MSDN , l'utilisation de l' //Uindicateur et la redirection vers un fichier provoquent cscriptle renvoi du résultat en utilisant UTF-16.

Et puis, comme par magie, cela a fonctionné ( @ #% $ & ^ @ $% !!!?!?!) En utilisant commandcomme "cscript //E:jscript //Nologo"et encodingcomme "UTF-8". Tant pis.

cofiem
la source
4

J'ai dû ajouter mon dossier nodejs à ma variable d'environnement Windows Path. Dans Windows 8, ouvrez le Panneau de configuration, accédez à Système, Paramètres système avancés (sur la gauche), cliquez sur Variables d'environnement sur la gauche et modifiez la variable Path pour inclure le répertoire dans votre dossier nodejs (probablement dans Program Files).

Bien sûr, vous devez avoir Node.js installé (utilisez le programme d' installation de Windows ) et avoir installé CoffeeScript via NPM.

Evan
la source
4

Je sais que c'est une réponse très tardive à ce problème, mais je suis arrivé à quelque chose de similaire et j'ai parcouru le chemin complet pour comprendre ce qui causait vraiment le problème.

Il s'est avéré que le moteur Windows jscript par défaut est toujours sur es3, et de nombreux joyaux tirent parti des fonctionnalités es5 ou es6. Malheureusement, si cela se produit (vous utilisez une gemme ou un morceau de code qui exploitent les fonctionnalités es5 ou es6), il n'y a aucun moyen de le laisser fonctionner sur Windows avec le moteur natif js.

C'est la raison pour laquelle l'installation de node.js résout le problème (node ​​est au moins es5).

J'espère que cela peut aider certaines personnes aux prises avec une erreur d'exécution de jsexec.

Mon conseil de 2 cents est d'installer node (très facile) ou d'installer v8, et non de supprimer // = require_tree.

Remarque execjs utilisera automatiquement le nœud s'il est détecté. Sinon, forcez son utilisation, en ajoutant au démarrage quelque chose comme:

ENV['EXECJS_RUNTIME'] = 'Node'

Pour définir l'environnement sur node.

Dinuz
la source
l'installation du nœud est une bonne idée (et probablement la plus simple), mais c'est toujours un peu exagéré compte tenu de sa taille
prusswan
4

Pour les utilisateurs de Windows, cela peut fonctionner. Il y a un problème avec coffee-script-source> 1.9.0 fonctionnant sous Windows.

Il semble que vous deviez ajouter ceci à votre gemfile:

gem 'coffee-script-source', '1.8.0'

alors fais

mise à jour du bundle coffee-script-source

J'ai essayé toutes les options ci-dessus, et j'ai également mélangé quelques combinaisons d'entre elles, jusqu'à ce que je trouve ce Rails-4, ExecJS :: ProgramError dans Pages # bienvenue et que j'aie effectué plusieurs mises à jour de gemmes système et des installations et mises à jour groupées .

J'ai annulé tous mes essais et rétrogradé mon coffee-script-source et cela fonctionne. Publier ici pour aider toute autre personne susceptible d'avoir un problème similaire.

Mise à jour des fichiers dans le fournisseur / cache

coffee-script-source-1.8.0.gem Suppression des fichiers .gem obsolètes du vendeur / cache coffee-script-source-1.9.1.1.gem Bundle mis à jour!

DJSampat
la source
J'ai essayé l'option 3 de la réponse acceptée, puis j'ai obtenu une "Erreur d'argument", j'ai essayé d'installer nodejs, je n'ai pas aidé, j'ai ajouté nodejs aux variables de chemin (je suis sur Win10) et j'ai finalement essayé votre approche. Travaillé! Merci
elk
3

Pour les débutants comme moi:

  1. Accédez à \ app \ views \ layouts \ application.html.erb
  2. Changer la ligne 6 de:

    '<% = javascript_include_tag' application ',' data-turbolinks-track '=> true%>'

à

<%= javascript_include_tag 'defaults', 'data-turbolinks-track' => true %>

Source du tutoriel à corriger ici

Leandro P.
la source
La mine fonctionne juste quand je mets les deux lignes: <%= stylesheet_link_tag 'defaults', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'defaults', 'data-turbolinks-track': 'reload' %> merci Leandro P.
rld
1
Veuillez ne pas faire ça. Il supprimera simplement tout le Javascript de votre application Rails. Cela masque le problème mais en causera d'autres plus tard.
mattangriffel
Ouais, comme le dit @mattangriffel, ne fais pas ça.
Neil Atkinson
2

Solution rapide et sale: retirer //= require_tree .de application.js.

Comme je l'explique dans les commentaires de la question, cela ne résout pas réellement le problème sous-jacent à l'origine de l'erreur, mais l'évite simplement.

Colin R
la source
Bonjour Colin R, j'ai besoin d'aide. Que faire si l'erreur se produit à la ligne 5, où seule la suppression de <% = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true%> cette ligne de code a résolu le problème. Mais bootstrap ne s'applique pas à la page Web. Même en supprimant * = require_tree. de application.css.sass ne fonctionne pas. Le système de mon ami a Windows 7 32 bits, nodejs n'est pas installé. Même la méthode 3 suggérée par vous ne fonctionne pas. Je pense qu'il n'y a pas de problème avec js dans mon cas. Une idée comment éviter l'erreur?
apprenant le
J'ai également installé Node.js et le chemin de npm est défini dans les variables d'environnement. Toujours la même erreur. Je développe l'application dans le système d'exploitation Windows 8.1 64 bits, et les mêmes gemmes sont utilisées.
apprenant le
2

J'ai utilisé la solution numéro 2 parce qu'avant j'avais eu cette erreur, mais dans cet emplacement ne fonctionnait pas, alors j'ai ajouté le

gem 'coffee-script-source', '1.8.0'

et courir

bundle install

et mon problème a été résolu

Yuliem Alavez
la source
Si vous avez utilisé la solution numéro 2, vous devez recharger toutes les lignes de virgule dans les fenêtres après l'installation de Node.js. Allumez ensuite le serveur et réessayez.
Yuliem Alavez
1

Voici une solution moins compliquée, pour les débutants:

Si vous ne faites que suivre le didacticiel, vous travaillez probablement avec le Gemfile par défaut (ou presque). Vous pouvez l'ouvrir dans votre éditeur de texte et supprimer le signe dièse au début de cette ligne:

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

Vous devrez réexécuter bundle install, ce qui téléchargera probablement quelques éléments. Mais une fois que c'est le cas, vous devriez pouvoir démarrer le serveur sans aucun problème.

Au moins, cela a fonctionné pour moi.

Cela fonctionne également sur Ubuntu 12.04, d'ailleurs.

Karl Giesing
la source
0

Avez-vous changé l'emplacement de votre code de C: \ Users \ this-user \ yo-app ?

Quand j'étais jeune dans les rails, j'ai créé une application et l'emplacement par défaut de mon application était C: \ Users \ Duncan \ my-app , puis, lorsque j'ai changé mon-application et l'ai placée dans D: \ All-my-Apps -dossier j'ai eu cette erreur ....

Je me suis gratté la tête, j'ai essayé 1,2,3 et plus ..... rien! Jusqu'à ce que je retourne tout le code à l'emplacement du dossier par défaut et à ma grande surprise, je roulais à nouveau :)

Au cas où quelqu'un trouverait cela utile (je ne peux pas expliquer pourquoi cela s'est produit, peut-être que quelqu'un le pourrait sans spéculation)

dancun chiriga
la source