2

memcached gem と act_as_cached プラグインをインストールしました。 クラス Bike < ActiveRecord::Base act_as_cached ......... end class Car < ActiveRecord::Base act_as_cached ......... end のような

モデルはほとんどありません。













自転車。get_cache ("キー") { Bike.find(...) }
車。get_cache ("key") { Car.find(...) }

でも、必要なオブジェクトではなく間違ったオブジェクトをフェッチするさまざまなキーを維持しています。

4

1 に答える 1

1

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

このブログ投稿で、少し異なる例を見つけてください。

于 2013-10-03T08:59:04.643 に答える