0

ID のキューを維持する必要がある Ruby on Rails アプリがあります。グローバル配列をキューとして使用しようとしましたが、アプリの複数のインスタンスが実行されると、Web アプリのグローバル変数がグローバルでなくなることを読みました。次に、アプリケーション全体のキューを維持するにはどうすればよいですか?

これが私の ApplicationController の外観です。

class ApplicationController < ActionController::Base
  protect_from_forgery

  helper_method :update_queue, :get_next_free_agent
  $agent_queue = []
  def update_queue(agent)
    if agent.status == "AVAILABLE"
        if agent_queue.find_index(agent.reg_id) == nil
            $agent_queue.push(agent.reg_id)
        end
    else
        $agent_queue.delete(agent.reg_id)
    end
  end

  def get_next_free_agent
    return agent_queue.shift
  end
end

これは機能しませんし、グローバル変数がどのように悪い考えであるかについて読んだ後は、もう使用したくありません。代替ソリューションを提供してください。

ありがとう。

4

1 に答える 1

1

あなたの問題は、Resque のようなメッセージ キュー システムで解決できるようです。

そのルートをたどる必要がない場合は、配列をキー値ストアに格納します。これにより、配列に対するアトミック ポップ アンド プッシュ (redis など) が提供されます。この方法では、1 つのプロセスだけが配列にアクセスすることを心配する必要はありません。

于 2013-03-29T13:46:00.610 に答える