Я знаю, что это старый вопрос. Но на случай, если это поможет кому-то это увидеть. Недавно я обнаружил ошибку «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') }
В конечном счете, я думаю, что с тех пор мы удаляем только несколько заголовков, которые мы также можем отправить обратно. Если вы столкнулись с ошибкой внутри фреймворка, это может быть сложно отладить. Я бы начал с поиска мест, где вы могли бы изменить то, как фреймворк предпочитает общаться. Надеюсь, кто-то найдет это полезным.