Я вижу сбой веб-запросов из-за некорректных параметров после обновления приложения Rails с 4.2 до 5.0, которое также обновляет rack
с 1.6 до 2.0 из-за зависимостей гемов.
Запрос простойPOST с данными формы: {"id":"5ec3a6896a7c4781a581030c1714384b"}
.
Приложение Rails направляет этот запрос к смонтированному приложению Rack, на котором запущен сервер Sinatra.Ранее это могло считывать тело запроса, сгенерированное из хеша env
, переданного в приложение Rack маршрутизатором Rails:
# Rails 4.2 and rack 1.6:
Rack::Request.new(env).body.read
=> "{\"id\":\"5ec3a6896a7c4781a581030c1714384b\"}"
Sinatra может затем вызвать JSON.parse
и использовать полученный хеш параметра,Однако при обновлении входные данные различаются и не обрабатываются JSON:
# Rails 5.0 and rack 2.0:
Rack::Request.new(env).body.read
=> "%7B%22id%22:%225ec3a6896a7c4781a581030c1714384b%22%7D"
Это выглядит как своего рода CGI-экранированная версия предыдущего ввода:
CGI.parse("%7B%22id%22:%225ec3a6896a7c4781a581030c1714384b%22%7D")
=> {"{\"id\":\"5ec3a6896a7c4781a581030c1714384b\"}"=>[]}
Хотя я мог бы переписать весь поиск параметров для конечных точек Sinatra, это, казалось бы, сделало мой код еще более хрупким и обошло какую-то проблему с исходным кодом.Где идеальное место, чтобы исправить это?