Phusion パッセンジャーサーバーのフリー版とエンタープライズ版およびスレッドのローカル変数
概要
現在のスレッドは、乗客を「解放」する同時リクエスト間で同じであることが期待されますか?
スレッドローカルの Ruby 変数が同時リクエストに依存しないというバグがあります。つまり、2 つの同時リクエストの両方に同じスレッド ID が表示されます (処理速度を低下させるためにスリープを使用してシミュレートされています)。
これはPassenger Enterprise Editionでは異なりますか?
Railsの単一リクエストの存続期間中分離されたスレッドローカル変数を取得する適切な方法はありますか?
更新しました:
解決策
リクエストローカル変数が必要な場合は、それを Rack リクエスト環境オブジェクトに入れることを検討してください。より完全な概要については、この質問の回答を参照してください。
スレッドローカルに関しては、これは確かに予期しない動作のように見えますが、単一のスレッドがその存続期間全体にわたってリクエストによって所有されることを保証しない何かを乗客が実行している可能性は十分にあります。 Rack::Lock ミドルウェアは通常、リクエスト全体にミューテックスを適用することでこの問題を解決しますが、ミューテックスを削除した場合、その同期が保証されるわけではありません。一般に、スレッドローカル変数はコードの匂いであり、おそらく、してはいけないことを行っていることを示すものです。