J'ai créé une application Rails 3.1 propre et simple appelée demo1. Il contient deux contrôleurs - bonjour et au revoir. Je reçois le message d'erreur suivant lorsque j'essaie de charger http: // localhost: 3000/say/hello :
ActionView::Template::Error (
(in /home/me/dev/Ruby/demo1/app/assets/javascripts/say.js.coffee)):
3: <head>
4: <title>Demo1</title>
5: <%= stylesheet_link_tag "application" %>
6: <%= javascript_include_tag "application" %>
7: <%= csrf_meta_tags %>
8: </head>
9: <body>
app/views/layouts/application.html.erb:6:in
`_app_views_layouts_application_html_erb___558576499_89622220'
La ligne problématique de application.html.erb est:
<%= javascript_include_tag "application" %>
Lorsque j'ai créé l'application à l'aide de Rails 3.0, cette ligne était:
<%= javascript_include_tag :defaults %>
Et cela a bien fonctionné. En fait, lorsque je modifie application.html.erb pour qu'il utilise: par défaut, tout fonctionne, mais je souhaite utiliser les nouvelles fonctionnalités de Rails 3.1.
Je n'arrive pas à trouver quoi que ce soit sur Google à ce sujet, je suppose, car Rails 3.1 vient de paraître.
En passant, je suis le premier chapitre du Développement Web Agile avec Rails (4ème édition) Mis à jour pour le livre Rails 3.1 .
Quelques informations environnementales qui peuvent aider à répondre à cette question:
$ cat /etc/issue
Ubuntu 10.04.2 LTS \n \l
$ Ruby -v
Ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
$ Rails -v
Rails 3.1.0
Contenu du fichier say.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/
Ok, j'ai compris quel était le problème et je vais donc répondre à ma propre question.
Le problème était le fichier app/assets/javascripts/application.js contenant le code mis en commentaire. Cependant, l'une des lignes commentées était la suivante:
//= require_tree .
Quand je supprime cette ligne, tout fonctionne bien.
J'espère que cela t'aides. Si quelqu'un peut nous expliquer pourquoi le soulignement a été à l'origine du problème, ce serait formidable.
Je viens de rencontrer ce problème lors du démarrage d'une nouvelle application RoR 3.2.1. Le problème est qu’il manque un runtime JS, car la ligne
# gem 'therubyracer'
dans votre Gemfile a ce # devant lui. Dieu seul sait pourquoi ils envoient Rails avec cette ligne commentée, car tout tutoriel utilisant generate scaffold
ou similaire entraînera le processus de compilation d'actifs sur le fichier Coffeescript généré.
La solution consiste à supprimer le commentaire de cette ligne. L'installation d'un autre runtime JS peut également résoudre le problème. Voir par exemple ExecJS et impossible de trouver un runtime JavaScript .
Le guide officiel Ruby on Rails dit:
La compilation de CoffeeScript vers JavaScript nécessite un runtime JavaScript et l'absence d'un runtime vous donnerait une erreur execjs. Généralement, Mac OS X et Windows sont livrés avec un runtime JavaScript installé. Rails ajoute la gemme therubyracer à Gemfile dans une ligne commentée pour les nouvelles applications et vous pouvez supprimer le commentaire si vous en avez besoin. therubyrhino est le runtime recommandé pour les utilisateurs de JRuby et est ajouté par défaut à Gemfile dans les applications générées sous JRuby. Vous pouvez rechercher toutes les exécutions prises en charge sur ExecJS.
Supprimez simplement les 2 lignes de application.js
//= require turbolinks
//= require_tree
J'ai eu le même problème avec Rails 3.1.1
Une fois que j'ai réintégré le code suivant dans mon Gemfile, mon problème a disparu:
group :assets do
gem 'sass-Rails', '~> 3.1.4'
gem 'coffee-Rails', '~> 3.1.1'
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-Rails'
Cela a été placé dans mon Gemfile lors de la configuration initiale du projet, c’est-à-dire en utilisant "Rails new myapp".
Notez que dans mon fichier de modèle, j'inclus:
<%= javascript_include_tag :application %>
J'espère que cela pourra aider
Si vous utilisez Windows et que vous avez utilisé RailsInstaller pour lancer votre développement, vous devez utiliser le fichier .bat fourni avec RailsInstaller pour exécuter votre serveur. En outre, vous ne pouvez malheureusement pas utiliser de hook CMD tel que conemu pour démarrer le serveur.
Pour le bénéfice des futurs Googlers, je suis descendu dans un terrier de lapin en essayant d'installer therubyracer
jusqu'à ce que je tombe par hasard sur ce post connexe:
ExecJS :: RuntimeError dans le moteur Rails 3.2.8 avec javascript_include_tag
Le lien mentionné explique qu'ExecJS est configuré de manière incorrecte pour Windows 8 prêt à l'emploi. En particulier, la solution de contournement décrite par pottsk a fait l'affaire pour moi.
https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952
Cela implique de changer la façon dont l'exécutable cscript
est exécuté par ExecJS dans %rubyinstall%\gems\2.0.0\gems\execjs-2.0.1\lib\execjs\runtimes.rb
:
# 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
# )
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
)
Il va sans dire que ce n'est pas une solution permanente, mais cela me permet de rester opérationnel jusqu'à ce que le correctif soit intégré.
Supprimer //= require_tree
empêchera simplement le chargement de vos fichiers javascript dans Rails. Cela arrêtera probablement l'erreur, mais probablement pas ce que vous voudriez.
Cependant, dans mon cas, j'avais des fichiers .js.coffee
avec un retrait incorrect. Une fois que j'ai résolu ce problème (en les supprimant), cela a fonctionné.
L'ajout de la gemme 'therubyracer' a résolu le problème. Je recevais l'erreur seulement après avoir ajouté un fichier js externe via <% = javascript_include_tag%>
Si vous utilisez Linux (Ubuntu Linux comme le mien), installez javascript runtime. Le mieux est d'émettre la commande ci-dessous à installer,
apt-get install nodejs
ou bien, pour chaque nouvelle création de projet Rails, ajoutez
gem 'therubyracer' à votre gemfile et lancez l'installation en bundle
Il suffit de supprimer la ligne suivante (ligne n ° 6) du fichier générateur (application.html.erb):
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
s'il vous plaît me mettre à jour s'il y a un inconvénient pour supprimer cette ligne
Merci
modifier le fichier générateur (application.html.erb.tt
) comme suit:
<%= javascript_include_tag "application", "data-turbolinks-track" true %>
<%= javascript_include_tag :default, "data-turbolinks-track" true %>
devise_scope :user do
get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session
end
Si votre route.rb a cette ligne ci-dessus, supprimez-la et exécutez-la. C'est ce qui a corrigé mon problème.
J'ai ce problème dans Rails 4, et si je le change en "défaut" plutôt qu'en "application", cela fonctionne, comme le dit le PO. Mais c'est dans un Gem externe que je préférerais ne pas éditer. J'ai constaté que si je forçais mon Gemfile à utiliser la version 1.8.0 de coffee-script-source, à effectuer une installation groupée et à démarrer le serveur, tout fonctionnerait correctement.
Une autre chose que vous pouvez essayer et qui a fonctionné pour moi est d’ajouter le joyau json (et peut-être aussi le yajl-Ruby) à votre Gemfile. Je ne comprends pas vraiment pourquoi ils n'étaient pas déjà installés auparavant car:
Les rails dépendent de l'actionpack qui dépend des pignons qui dépendent du json et de l'inclinaison
et inclinaison dépend de yajl-Ruby
Pourtant, il semble que beaucoup de gemmes dépendantes n'aient pas été installées!?