Вслед за сообщением 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.

Другие вопросы по тегам