Rails 4 アプリケーションで使用するカスタム ラック ミドルウェアがあります。ミドルウェア自体は、クライアントが有効な情報を提供しなかった場合にデフォルトAccept
でContent-Type
ヘッダーを作成するためにここにありますapplication/json
(私は API に取り組んでいます)。したがって、各リクエストの前にこれらのヘッダーを変更し、各リクエストの後に、カスタム メディア タイプ情報を含むカスタム X-Something-Media-Type ヘッドを追加します。
Puma に切り替えたいので、そのようなミドルウェアのスレッドセーフが少し心配です。すべてのミドルウェアで遭遇する共通のものを除いて、私はインスタンス変数を@app.call
いじりませんでしたが、ここでも RailsCasts のコメントで読んだものを再現しました:
def initialize(app)
@app = app
end
def call(env)
dup._call(env)
end
def _call(env)
...
status, headers, response = @app.call(env)
...
dup._call
スレッドセーフの問題を処理するために本当に便利ですか?
そのインスタンス変数を除いて、@app
私は現在の環境変数で構築された現在のリクエストでのみ再生します:
request = Rack::Request.new(env)
env.update
そして、ヘッダーとフォーム情報を更新するために呼び出します。
Webrick
からのような同時 Web サーバーに切り替えるときに、そのミドルウェアで何らかの問題が発生すると予想するのは危険Puma
ですか?
はいの場合、スレッドセーフではないミドルウェアの部分を分離していくつかのテストを行ういくつかの方法を知っていますか?
ありがとう。