我有一个Ruby on Rails应用程序,我需要在其中维护一个id队列。我尝试使用全局数组作为队列,但后来读到,如果我的应用程序的多个实例运行,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
这也不起作用,在阅读全局变量如何区分坏主意之后,我也不想再使用它了。请提供替代解决方案。
感谢。
答案 0 :(得分:1)
远远看来你的问题似乎可以通过像Resque这样的消息队列系统来解决。
如果你不打算沿着那条路走下去,那就把数组存放在一个键值存储中,它提供原子弹出并推送数组(比如redis),这样你就不必担心一个进程访问数组