После сообщения Typhoeus в Rails/Sinatra

У меня есть сценарий, когда я делаю пост в 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

Когда я отправляю в «отправить данные», Typhoeus успешно отправляет сообщение и подталкивает пользователя к просмотру созданной записи (http://localhost:4000/renders/34634646464), которая является приложением rails.

Проблема в том, что пользователь никогда не перенаправляется с /send-data, поэтому, если вы обновите страницу, он попытается снова опубликовать сообщение. Я думаю, это имеет смысл, но мне действительно нужно, чтобы пользователь был перенаправлен на конечное (url) местоположение записи. Другими словами, новую запись можно увидеть, но этот метод перенаправления фактически не удаляет пользователя из приложения sinatra.

Что было бы лучшим способом справиться с этим? Единственное, что я могу придумать, это не использовать «followlocation», а вместо этого использовать действие контроллера /send-data для перенаправления после получения местоположения ответа от Typhoeus.


person bstar    schedule 29.12.2012    source источник


Ответы (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. Действие создания рельсов отвечает с помощью json, а «Местоположение» — это возвращаемое значение. «Расположение» — это место, где находится вновь созданная запись. Затем я просто делаю перенаправление Sinatra, которое перенаправляет на новую запись в приложении rails.

person bstar    schedule 29.12.2012