将 rails 的后台工作程序(如 Resque)部署到 CloudFoundry
Deploying background worker for rails like Resque into CloudFoundry
目前正在使用 Rails 构建一个实时仪表板,它需要后台处理以不时地轮询数据以保持仪表板更新。我能够通过 Resque、Resque-Scheduler 和 Redis 服务器实现这一点,并且在 本地 上工作正常。所有代码都被烘焙到 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 进程) 2. 作为 Ruby 无路由绑定到云上相同 Redis 服务的后台工作者应用程序。我不明白这里的过程,如果他们住在两个不同的应用程序空间以及他们如何相互交流?因为我需要来回传递大量数据。可以肯定的是,我缺少一些基本的应用程序架构设计。有人可以解释一下我该怎么做吗?
是的,您错过了一些东西,因为 rails 应用程序和工作程序是不同的进程。当您调用 Resque.enqueue(BackgroundJob, params)
时,您通过 redis 与 worker 通信。所以如果你想回信,你必须使用像 redis 或 postgres 或事件文本文件这样的东西。
你能得到更多关于你的任务的信息吗?
目前正在使用 Rails 构建一个实时仪表板,它需要后台处理以不时地轮询数据以保持仪表板更新。我能够通过 Resque、Resque-Scheduler 和 Redis 服务器实现这一点,并且在 本地 上工作正常。所有代码都被烘焙到 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 进程) 2. 作为 Ruby 无路由绑定到云上相同 Redis 服务的后台工作者应用程序。我不明白这里的过程,如果他们住在两个不同的应用程序空间以及他们如何相互交流?因为我需要来回传递大量数据。可以肯定的是,我缺少一些基本的应用程序架构设计。有人可以解释一下我该怎么做吗?
是的,您错过了一些东西,因为 rails 应用程序和工作程序是不同的进程。当您调用 Resque.enqueue(BackgroundJob, params)
时,您通过 redis 与 worker 通信。所以如果你想回信,你必须使用像 redis 或 postgres 或事件文本文件这样的东西。
你能得到更多关于你的任务的信息吗?