异常通知缺少rack.input

时间:2010-10-10 15:29:38

标签: ruby-on-rails

当我尝试在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 %>

我没有在我的应用程序的任何地方过度骑行。请帮忙。被困在这里 在这个错误中整整一天

2 个答案:

答案 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') }

最终我认为,从现在起我们只删除一些标题,我们也可以将所有内容发回。如果在框架内遇到错误,则调试起来很困难。我首先会找到你可能正在改变框架更喜欢沟通方式的地方。希望有人觉得这很有用。