当我尝试在Rails 3中使用Exception Notification插件时 我错了。
Missing rack.input
此错误发生在
中/vendor/plugins/exception_notification/lib/exception_notifier/views/exception_notifier/_request.text.erb
at line 3
这是_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 %>
我没有在我的应用程序的任何地方过度骑行。请帮忙。被困在这里 在这个错误中整整一天
答案 0 :(得分:4)
当env哈希出现问题时,可能会发生此错误。
我今天收到了“Missing rack.input”错误。我试图强制ExceptionNotifier在救援块内发送电子邮件,然后让我的应用程序正常恢复。但我不小心写了:
ExceptionNotifier::Notifier.exception_notification(Rails.env, e).deliver
应该是:
ExceptionNotifier::Notifier.exception_notification(request.env, e).deliver
也就是说,我发送的是Rails.env,它只是一个字符串,而不是request.env,包含rack.input对象的哈希。
希望这可以帮助任何有类似rack.input问题的人。
答案 1 :(得分:1)
我知道这是一个老问题。但万一它可以帮助别人看到这个。最近在与内部API通信时,我看到了“Missing rack.input”错误。我们试图做的一件事就是通过做这样的事情来回应最小的http标题:
def set_env_data
env = request.env.to_hash
env.delete_if { |k, v| k == k.downcase }
@sample_model.env = env
end
我们想要删除框架设置的标头。虽然我们的通信工作正常,但我们会在堆栈跟踪中看到“Missing rack.input”。在这种特定情况下,这是因为我们缺少action_dispatch设置的request_id。所以我们改变了:
env.delete_if { |k, v| k == k.downcase }
要:
env.delete_if { |k, v| k == k.downcase && !k.starts_with?('rack') && !k.starts_with?('action_dispatch') }
最终我认为,从现在起我们只删除一些标题,我们也可以将所有内容发回。如果在框架内遇到错误,则调试起来很困难。我首先会找到你可能正在改变框架更喜欢沟通方式的地方。希望有人觉得这很有用。