Si nous demandons un fichier image faux, les rails génèrent une erreur de serveur de 500 interne au lieu d'un 404. Voir le journal ci-dessous.
Voici la ligne dans routes.rb strong> qui prend 404s: P> Started GET "/images/doesnotexistyo.png" for 71.198.44.101 at 2013-03-08 07:59:24 +0300
Processing by DefaultController#error_404 as PNG
Parameters: {"url"=>"images/doesnotexistyo"}
Completed 500 Internal Server Error in 1ms
ActionView::MissingTemplate (Missing template default/error_404, application/error_404 with {:locale=>[:en], :formats=>[:png], :handlers=>[:erb, :builder]}. Searched in:
* "/home/prod/Prod/app/views"
3 Réponses :
Qu'est-ce que alors découvrez ce contrôleur, error_404 est en cours d'exécution et aucun modèle par défaut / error_404 a été trouvé, d'où l'erreur 500. < / p> Vous avez probablement un code similaire à celui-ci quelque part dans votre code: p> defaultController code>? Ce contrôleur traite avec le 404, au lieu des rails Réponse par défaut:
Nous avons mis à jour le Q avec une ligne dans les routes.rb qui attrape 404. La question est de savoir pourquoi fonctionne-t-elle pour certaines URL et non avec des extensions de fichiers (images en particulier)?
Quel est le contenu de la méthode error_404? La méthode atteint sa fin et tenter de rendre une vue avec ERB ou Builder, en utilisant le format fourni: PNG. Sauf si vous avez un error_404.png.erb ou error_404.png.builder, vous verrez cette erreur de la manière dont l'application est configurée en ce moment.
Ahhh je vois. Quelle est la bonne façon de gérer cela (et 404s en général) en 3.2.12? Pour répondre à votre question, ERROR_404 est une action vide qui rend simplement la vue correspondante .html.erb.
Le problème est que la méthode et à l'intérieur de l'action que vous auriez quelque chose comme p> Comme vous pouvez le constater, il est spécifié de la manière de gérer une demande JSON et une demande XML, mais comme il n'y a pas de espère qu'il aide :) p> Ajouter ceci à la redirection de votre gestionnaire 404: p> acclamations :) p> Utilisez ce code pour attraper tout Types de demandes: p> remplacer espère qu'il aide :) p> p> P> error_404 code> à l'intérieur du contrôleur code> par défaut ne peut pas gérer les demandes en format PNG. Lorsque vous demandez dites, une réponse JSON, vous pouvez créer une URL similaire à:
format.png code>, l'action ne peut pas gérer le
.png code > format. Ajoutez ceci: p>
: no_found_view code> avec votre page 404. Cela rendra la page 404 pour les demandes HTML et redirigera à soi (avec le format HTML) pour tout autre type de demande. P>
Merci! Si ce n'est pas un format HTML, pouvons-nous le forcer à rendant la vue HTML et à afficher la page 404 correcte?
Édité ma réponse, espérons que cela aide: D
Comment pouvons-nous mettre en place une prise - tout? En d'autres termes, si nous voulons attraper une extension de fichier (par exemple, .jpg, .gif) sans spécifier chacun individuellement, comment allait-nous l'approcher?
Format.La ne fonctionne pas lorsque nous essayons de rendre l'action 404.
Désolé mon mauvais. Format.La Code> attend un tas de formats en tant que paramètres, puis un blocage pour gérer ces formats, vous pouvez en lire à ce sujet
Peut-être pas pour vous, mais depuis que je fais des chèques finaux pour les pages de manière dynamique dans mes contrôleurs, je suis tout simplement sur mon 404'ing avec un pour gérer des fichiers non-HTML:
format.all { render :status => 404, :nothing => true }