私はdiscogs-wrapper
gemを使用して音楽情報にアクセスしていますが、APIリクエスト中にサーバが静止しています。私は実際の要求は、私が関数Discogs::Artist.find_by_name name
を呼び出すと、宝石の次の部分でトリガーされると信じています。外部のAPI応答を待っている間にサーバがすべてのリクエストをハングアップ
Net::HTTP.new(uri.host).start do |http|
http.request(request)
end
二つの異なるブラウザ(ChromeとFirefoxの)における2つの要求のログに従い、私が最初のアーティスト「ピンク・フロイド」の検索を実行し、他のブラウザにルートページをリフレッシュし、この最後の単純な要求これは通常、要求が持続する間、API要求の間にミリ秒かかる。
Started GET "/artists/show?utf8=%E2%9C%93&artist_name=pink+floyd&commit=search" for 127.0.0.1 at 2012-01-21 18:03:52 +0000
Processing by ArtistsController#show as HTML
Parameters: {"utf8"=>"✓", "artist_name"=>"pink floyd", "commit"=>"search"}
get_artist(pink floyd)
get_artist(pink floyd) - ended in 26394ms
Rendered artists/_search_form.html.haml (4.3ms)
Rendered discogs/artist/releases/_release.html.haml (606.5ms)
Rendered artists/show.html.haml within layouts/application (1876.4ms)
Completed 200 OK in 28303ms (Views: 1907.8ms | ActiveRecord: 0.0ms)
Started GET "/" for 127.0.0.1 at 2012-01-21 18:04:20 +0000
Processing by ApplicationController#show as HTML
Rendered artists/_search_form.html.haml (4.5ms)
Rendered application/show.html.haml within layouts/application (6.5ms)
Completed 200 OK in 23ms (Views: 22.0ms | ActiveRecord: 0.0ms)
は、どのように私は、サーバーが30秒よりもさらにを取ることができる応答を無駄にハングアップすることを避けることができますか? - thanks
これが動作しているようですし、それは、コードの非常にシンプルなラインですが、私はよ私がどのような問題に遭遇できるかを知るためにいくつかのものを読んでいます(これは原子的なものではありません)。ここでは、アプリケーション全体に影響を与える何かを実装しています。 – ecoologic
requireの非スレッド安全性は、起動時にレールがオンになっているときにすべてのアプリケーションをロードする理由です。レールそのものはスレッドセーフですが、スレッドセーフは一般的に扱いにくいビジネスです。何らかのグローバルな状態を操作しているときはいつでもスレッドセーフであるかどうかを尋ねます。ミューテックスをガードするか、実際にはスレッドのグローバルステートにするかどうかを尋ねます。 –