Phusion Passenger は、既存のプロセスをフォークして新しいサーバーを生成します。その後、さまざまなプロセスがコードを共有します。一方では、これにより、たとえば雑種サーバーと比較して多くのメモリが節約されます。一方、共有接続が適切にリセットされていない場合、memcached が混乱する可能性があります。
ユーザーセッションが混同されたとき、私はかつて同様の経験をしました。本当に怖い。
この問題には 2 つの解決策があります。
1) 「Smart Spawning」の代わりに「Conservative Spawning」を使用するように Passenger を設定します。ただし、共有メモリの利点がまったく失われます。または
2) Passenger が新しいサーバー プロセスを生成した場合は、memcached 接続がリセットされていることを確認します。そのために次のコードを使用します。入れてconfig/initializers/memcached_reset.rb
if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
if forked
# Close duplicated memcached connections - they will open themselves
Rails.cache.instance_variable_get(:"@data").try(:reset) if Rails.cache.instance_variable_get(:"@data").respond_to?(:reset)
end
end
end
このブログ投稿で、少し異なる例を見つけてください。