6
votes

Erreur de serveur interne 500 sur le fichier image manquant (Rails 3.2.12)

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"


0 commentaires

3 Réponses :


0
votes

Qu'est-ce que defaultController ? Ce contrôleur traite avec le 404, au lieu des rails Réponse par défaut: xxx

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: xxx


3 commentaires

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.



4
votes

Le problème est que la méthode error_404 à l'intérieur du contrôleur 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 à: xxx

et à l'intérieur de l'action que vous auriez quelque chose comme xxx

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 format.png , l'action ne peut pas gérer le .png format. Ajoutez ceci: xxx

espère qu'il aide :)

EDIT

Ajouter ceci à la redirection de votre gestionnaire 404: xxx

acclamations :)

Edit2

Utilisez ce code pour attraper tout Types de demandes: xxx

remplacer : no_found_view 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.

espère qu'il aide :)


5 commentaires

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 attend un tas de formats en tant que paramètres, puis un blocage pour gérer ces formats, vous pouvez en lire à ce sujet ici . Je reviendrai vers vous dès que je trouve une solution de capture.



0
votes

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 }


0 commentaires