4

rack-timeout は Gemfile に含まれていますが、本番環境のミドルウェアとしてのみ必要です。したがって、初期化子には次のものがあります。

config.middleware.delete Rack::Timeout

この行の前後を調べると、rack-timeout がアレイから削除されていることがわかります。とにかく、リクエストはまだタイムアウトしており、gem にすばやく「プット」すると、それが実際に原因であることがわかります。

これは、delete が呼び出される前にミドルウェア スタックが既に構築されているためですか? または、すべてのリクエストでスタックが読み取られますか? その場合、何が問題になる可能性がありますか?

4

1 に答える 1

8

次のようなものを持っていないのはなぜですか?

group :production do
  gem "rack-timeout"
end

理論的には、イニシャライザーでのミドルウェアの削除は、サーバーの再起動後に問題を処理するはずですconfig/initializers/


もう少し実験を行い、これをにドロップしましたconfig/initializers/rack-timeout.rb

if Rails.env.production?
  Rack::Timeout.timeout = 0.5
else
  Rails.configuration.middleware.delete Rack::Timeout
end

そして、これはスキャフォールディングされたコントローラーで:

sleep 1

開発サーバーを再起動した後、すべてがクールに見えました (タイムアウトは見えません:D)。だから、多分ただの悪い変数です。

私はまだ、運用専用グループを使用する方が良い解決策だと思います。

OSX で Ruby 1.9.2-p290 を使用して Rails 3.2.2 を実行しました。

于 2012-02-25T21:43:00.237 に答える