Уведомление об исключении Отсутствует rack.input - PullRequest
4 голосов
/ 10 октября 2010

Когда я пытаюсь использовать плагин Exception Notification в моем Rails 3 проект, я получаю эту ошибку.

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 ]

4 голосов
/ 25 февраля 2011

Эта ошибка может возникнуть, если что-то не так с хэшем 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 голос
/ 28 октября 2015

Я знаю, что это старый вопрос. Но на случай, если это поможет кому-то это увидеть. Недавно я обнаружил ошибку «Missing rack.input» при взаимодействии с внутренним API. Одна из вещей, которую мы пытались сделать, - ответить только минимальными заголовками 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» в трассировке стека. В данном конкретном случае это было потому, что мы пропустили request_id, установленный action_dispatch. Итак, мы изменились:

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

В конечном счете, я думаю, что с тех пор мы удаляем только несколько заголовков, которые мы также можем отправить обратно. Если вы столкнулись с ошибкой внутри фреймворка, это может быть сложно отладить. Я бы начал с поиска мест, где вы могли бы изменить то, как фреймворк предпочитает общаться. Надеюсь, кто-то найдет это полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...