0

app.rb の Typhoeus 経由で Sinatra に投稿するシナリオがあります。次のようになります。

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」を使用せず、Typhoeus からの応答場所を取得した後に /send-data コントローラー アクションにリダイレクトさせることです。

4

1 に答える 1

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サーバーに変更を加える必要がありました。rails create アクションは json で応答し、'Location' はその戻り値です。「場所」は、新しく作成されたレコードが存在する場所です。次に、Rails アプリの新しいレコードにリダイレクトする Sinatra リダイレクトを実行します。

于 2012-12-29T05:13:52.563 に答える