Вслед за сообщением Typhoeus в Rails/Sinatra
У меня есть сценарий, где я делаю пост в Синатре через Typhoeus в app.rb. Это выглядит так:
post "/send-data" do
...
request = Typhoeus::Request.new("http://localhost:4000/renders",
:method => :post,
:headers => { :Accept => "text/html" },
:followlocation => true,
:timeout => 100, # milliseconds
:params => params )
# Run the request via Hydra.
hydra = Typhoeus::Hydra.new
hydra.queue(request)
hydra.run
...
end
Когда я отправляю сообщение "send-data", Typhoeus успешно отправляет сообщение и подталкивает пользователя к просмотру созданной записи (http://localhost:4000/renders/34634646464), которая является приложением rails.
Проблема заключается в том, что пользователь никогда не перенаправляется от /send-data, поэтому, если вы обновите страницу, он попытается повторить публикацию. Я думаю, это имеет смысл, но мне действительно нужно, чтобы пользователь был перенаправлен в окончательное (url) местоположение записи. Другими словами, новую запись можно увидеть, но этот метод перенаправления фактически не удаляет пользователя из приложения sinatra.
Что было бы лучшим способом справиться с этим? Единственное, о чем я могу подумать, - не использовать 'followlocation', а вместо этого заставить контроллер /send-data выполнить перенаправление после получения местоположения ответа от Typhoeus.
1 ответ
Я попробовал мое предложение, и оно работает... и выглядит не так уж плохо.
request = Typhoeus::Request.new("http://localhost:4000/renders.json",
:method => :post,
:headers => { :Accept => "json" },
:timeout => 100, # milliseconds
:params => params )
hydra = Typhoeus::Hydra.new
hydra.queue(request)
hydra.run
response = request.response
redirect response.headers_hash['Location']
Мне пришлось внести изменения на моем сервере рельсов. На действие rails create отвечает json, а 'Location' - это возвращаемое значение. "Местоположение" - это место, где находится вновь созданная запись. Затем я просто делаю перенаправление Sinatra, которое перенаправляет на новую запись в приложении rails.