web-dev-qa-db-fra.com

Problème de Rails 3.1 avec javascript_include_tag dans application.html.erb

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/
17
ryan

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.

33
ryan

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.

7
Confusion

Supprimez simplement les 2 lignes de application.js

//= require turbolinks

//= require_tree

3
Talha

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

2
DavB

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.

2
Knyteguy

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é.

2
camflint

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é.

1
thedanotto

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%>

0
Tarun Reddy

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

0
hariharan kumar

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

0
Skyfall

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 %>
0
kys48
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.

0
gautam

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.

0
metaforge

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!?

0
billmccord