2010-10-10 9 views
4

Lorsque j'essaie d'utiliser le plug-in Notification d'exception dans mon projet Rails 3 , j'obtiens cette erreur.Remarque d'exception manquant rack.input

Missing rack.input 

cette erreur se produit dans

/vendor/plugins/exception_notification/lib/exception_notifier/views/exception_notifier/_request.text.erb 
at line 3 

Ce fichier est le _request.text.erb

1: * URL  : <%= raw @request.url %> 
2: * IP address: <%= raw @request.remote_ip %> 
3: * Parameters: <%= raw @request.filtered_parameters.inspect %> 
4: * Rails root: <%= raw Rails.root %> 

Je n'ai pas plus monté ce partout dans mon application. aidez s'il vous plaît. Coincé ici dans cette erreur pendant une journée entière

Répondre

4

Cette erreur peut se produire en cas de problème avec le hachage d'env.

J'ai reçu l'erreur "Missing rack.input" aujourd'hui. J'essayais de forcer ExceptionNotifier à envoyer l'e-mail à l'intérieur d'un bloc de secours, puis de récupérer mon application normalement. Mais j'avais accidentellement écrit:

ExceptionNotifier::Notifier.exception_notification(Rails.env, e).deliver 

Quand il doit être:

ExceptionNotifier::Notifier.exception_notification(request.env, e).deliver 

qui est, j'envoyais Rails.env, qui est juste une chaîne, au lieu de request.env, le hachage inclut l'objet rack.input.

Espérons que cela aide tous ceux qui ont des problèmes d'entrée rack.

1

Je sais que c'est une vieille question. Mais au cas où ça aiderait quelqu'un à voir ça. Je voyais l'erreur "Missing rack.input" récemment lors de la communication avec une API interne. Une des choses que nous essayions de faire était de répondre avec seulement les en-têtes minimales http en faisant quelque chose comme ceci:

def set_env_data 
    env = request.env.to_hash 
    env.delete_if { |k, v| k == k.downcase } 
    @sample_model.env = env 
end 

Nous voulions dépouiller les en-têtes fixées par le cadre. Bien que notre communication fonctionnait, nous voyions "Missing rack.input" dans la trace de la pile. Dans ce cas précis, c'était parce que nous manquions le request_id défini par action_dispatch. Nous avons donc changé:

env.delete_if { |k, v| k == k.downcase } 

Pour:

env.delete_if { |k, v| k == k.downcase && !k.starts_with?('rack') && !k.starts_with?('action_dispatch') } 

En fin de compte, je pense que, puisque maintenant nous ne supprimer quelques têtes que nous pouvons aussi bien envoyer tout retour. Si vous rencontrez une erreur dans le framework, il peut être difficile de déboguer. Je commencerais par chercher des endroits où vous pourriez modifier la façon dont le cadre préfère communiquer. Espérons que quelqu'un trouve cela utile.