Неверно сформированные параметры POST для Rails, проанализированные смонтированным приложением Rack - PullRequest
0 голосов
/ 16 мая 2019

Я вижу сбой веб-запросов из-за некорректных параметров после обновления приложения 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, это, казалось бы, сделало мой код еще более хрупким и обошло какую-то проблему с исходным кодом.Где идеальное место, чтобы исправить это?

...