目前正在用Rails构建一个实时仪表板,它需要一个后台处理来保持数据的轮询,以保持仪表板的更新。我能够通过Resque, Resque- scheduler和Redis Server实现这一点,并且在本地工作良好。所有的代码都嵌入到Rails应用程序中,例如,如果用户访问仪表板页面,在dashboard_controller中,我像这样对作业进行排队
Resque.enqueue(BackgroundJob, params)
我有工作执行的工作从app/worker/background_job.rb
class BackgroundJob
@queue = :backgroundq
def self.perform
< PERFORM CODE HERE>
end
end
问题:
当我必须部署到Cloudfoundry时,它指示我以不同的名称部署相同的代码两次1。作为Rails应用程序(Web Process)作为一个Ruby无路由应用,用于后台worker绑定到云上的同一个Redis服务。我不明白这里的过程,如果他们生活在两个不同的应用空间,他们如何相互沟通?因为我需要来回交流大量的数据。当然,我缺乏一些基本的应用程序体系结构设计。有人能解释一下我该怎么做吗?
是的,你错过了一些东西,因为rails应用程序和worker是不同的进程。当你调用Resque.enqueue(BackgroundJob, params)
时,你通过redis与worker通信。因此,如果你想要沟通,你必须使用类似redis或postgres或事件文本文件。
你能得到更多关于你的任务的信息吗?