UPDATE: suggestion de Colin de supprimer la ligne // = require_tree. a résolu le problème.
Pendant deux jours, j’ai perdu du temps à suivre chaque suggestion et à régler mon problème. J'essaie de suivre le livre http://Ruby.railstutorial.org sur la machine Windows et je ne peux pas, pour ma vie, dépasser la vilaine erreur 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 msi, l'utilisation de 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 le 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 essayé plusieurs pierres précieuses, mais je vous prie de suggérer des modifications qui pourraient m'aider à développer des fenêtres. J'ai utilisé rubyinstaller pour tout.
Qu'est-ce que je rate?
Mon ami tentait un Rails tutoriel sur Win 8 RTM il y a quelques mois et a rencontré cette erreur. Je ne suis pas sûr que ce problème existe également dans Windows 7 , mais cela peut aider.
Options:
1) Supprimer //= require_tree .
/Ignorant le problème - Comme l'a dit ColinR ci-dessus, 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 - De nombreuses personnes semblent finir par installer Node.js et l’utiliser à la place du moteur d’exécution JavaScript déjà présent sur leur ordinateur. 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 Rails (1) insère une ligne de code dans chaque projet généré par un échafaudage qui cause un problème, ou (2) exige que nous installons des logiciels supplémentaires uniquement pour exécuter cette ligne de code par défaut, ce qui nous a finalement permis de résoudre notre problème fondamental (vos miles peuvent varier).
Le correctif qui a fonctionné pour nous: Sur le système rencontrant des problèmes, recherchez le fichier runtimes.rb d'ExecJS fichier. Cela ressemble à this . Faites une copie du fichier trouvé pour la sauvegarde. Ouvrez le fichier 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",
- retirer le //U
seulement. Puis sur la ligne contenant :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE
- remplace l'UTF-16LE par 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 d'origine. Si tout va bien, 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 (espérons-le) créée et tout reviendra à la case départ. Dans ce cas, considérez l'option 3 et continuez votre recherche. Dites-nous ce qui fonctionnera éventuellement pour vous. À moins que ce ne soit pour supprimer le require_tree ou pour installer node.js, il en existe déjà beaucoup. :)
Avait le même problème OS- Windows 8 Erreur- 'ExecJS :: RuntimeError ...' Solution- manquant Node.js
J'avais ce problème et je parcourais Internet. J'utilise Windows 8 avec ceci Rails gem)
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é - a redémarré la machine et tout a fonctionné.
Je privilégiais la voie Learning . Il semble que le problème découle 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 ne fonctionnaient pas pour moi. J'ai changé UTF-16LE
à UTF-8
, mais il a quand même renvoyé une chaîne vide. J'ai enlevé \\U
du command
- ce texte a au moins renvoyé du texte, mais le codage était incorrect - dans le navigateur, il s’affichait en caractères chinois.
Selon cet article de blog MSDN , en utilisant le //U
flag et la redirection vers un fichier force cscript
à renvoyer le résultat en utilisant UTF-16
.
Et puis, comme par magie, cela a fonctionné ( @ #% $ & ^ @ $% !!!?!?!) En utilisant command
comme "cscript //E:jscript //Nologo"
et encoding
comme "UTF-8"
. Tant pis.
Pour les utilisateurs de Windows, cela peut fonctionner. Coffee-script-source> 1.9.0 s'exécute sous Windows.
Il semble que vous deviez ajouter ceci à votre fichier gem:
gem 'coffee-script-source', '1.8.0'
alors fais
mise à jour du paquet coffee-script-source
J'ai essayé toutes les options ci-dessus, et aussi mélangé quelques combinaisons, jusqu'à ce que je trouve ceci Rails-4, ExecJS :: ProgramError dans Pages # bienvenue et j'avais fait plusieurs mises à jour de gem système et installation de bundles et mises à jour.
J'ai annulé tous mes essais et rétrogradé mon café-script-source et cela fonctionne. Publier ici pour aider les autres, qui peuvent avoir un problème similaire.
Mise à jour des fichiers dans vendor/cache
coffee-script-source-1.8.0.gem Suppression des fichiers .gem obsolètes de vendeur/cache coffee-script-source-1.9.1.1.gem Le paquet a été mis à jour!
Je devais 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 (à gauche), cliquez sur Variables d'environnement à gauche, puis modifiez la variable Path pour inclure le répertoire dans votre dossier nodejs (probablement dans Program Files).
Bien entendu, vous devez avoir installé Node.js (utilisez le Windows installer ) et installé CoffeeScript via NPM.
Je sais que la réponse à cette question est très tardive, mais j’ai adopté une démarche similaire et j’ai exploré en profondeur la cause réelle du problème.
Il s’est avéré que le moteur jScript de Windows par défaut est toujours sur es3 et que 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 exploitant les fonctionnalités es5 ou es6), il n’existe aucun moyen de le laisser fonctionner sous Windows avec le moteur js natif.
C’est la raison pour laquelle installer node.js résout le problème (le noeud est au moins es5).
J'espère que cela pourra aider certaines personnes aux prises avec une erreur d'exécution de jsexec.
Je vous conseille d'installer le nœud (très facilement) ou d'installer la v8 sans retirer le // = require_tree.
Note execjs utilisera automatiquement le noeud s'il est détecté. Sinon forcer son utilisation, en ajoutant au démarrage quelque chose comme:
ENV['EXECJS_RUNTIME'] = 'Node'
Pour définir env sur node.
Pour les débutants comme moi:
Changer la ligne 6 de:
'<% = javascript_include_tag' application ',' data-turbolinks-track '=> true%>'
à
<%= javascript_include_tag 'defaults', 'data-turbolinks-track' => true %>
Solution rapide et sale: supprimez //= require_tree .
de application.js
.
Comme je l'explique dans les commentaires de la question, cela ne résout pas le problème sous-jacent à l'origine de l'erreur, mais le contourne simplement.
J'ai utilisé la solution numéro 2 parce que précédemment j'avais cette erreur, mais dans cette ocation 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
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 situé au début de cette ligne:
# gem 'therubyracer', :platforms => :Ruby
Vous devrez relancer bundle install
, qui téléchargera probablement quelques petites choses. Mais une fois que cela se produit, vous devriez pouvoir démarrer le serveur sans problème.
Au moins, cela a fonctionné pour moi.
Cela fonctionne également sur Ubuntu 12.04, d'ailleurs.
Avez-vous changé l'emplacement de votre code de C:\Utilisateurs\cet-utilisateur\yo-app?
Quand j'étais jeune dans Rails J'ai créé une application et l'emplacement par défaut de mon application était C:\Utilisateurs\Duncan\mon-application, puis, lorsque je a changé mon application et l'a placée dans le dossier D:\All-my-Apps. J'avais cette erreur ....
Je me suis gratté la tête, essayé 1,2,3 et plus ..... rien! Jusqu'à ce que je renvoie tout le code à l'emplacement du dossier par défaut et à mon grand étonnement, je roulais à nouveau :)
Au cas où quelqu'un trouverait cela utile (je ne peux pas expliquer pourquoi c'est arrivé, peut-être que quelqu'un pourrait sans spéculation)
Exécution de Win 8 64 bits Rails 4.2.5 Ruby 2.1.7