一个铁路应用程序可以使用多个 Resque(在不同的引擎中)和多个 redis 实例吗?

Can one rail app use multiple Resque (in different engines) and multiple redis instances?

我有我的 rails 应用程序,其中我的不同服务在不同的不同引擎中。我想为我的不同引擎使用不同的 resque(以及不同的 redis 和不同的工作人员)。如何在 rails ?

您可以为每个引擎使用与 different namesapces 相同的 redis。 或者,如果你关心的是 redis 的内存,你可以尝试使用 redis connection pool gem.

由于您没有分享任何代码,我不确定您的应用程序是如何构建的,以及您如何使用 Redis 和 worker。因此,在回答这个问题时,我将不得不假设很多事情。

假设你的结构是这样的

root
  engines
    engine1
      app
      config
      ...
    engine2
      app
      config
      ...

你可以像这样保持resque配置

resque1 配置 redis 运行 localhost 端口 6380

#root/engines/engine1/config/resque.yml 
development: localhost:6379 #redis1
test: localhost:6379
...

resque2 配置 redis 运行 localhost 端口 6380

#root/engines/engine2/config/resque.yml 
development: localhost:6380 
test: localhost:6380
...

rescue1 初始化器

#root/engines/engine1/config/initializers/resque.yml
rails_root = File.dirname(__FILE__) + '/../..'
rails_env = ENV['RAILS_ENV'] || 'development'
config_file = rails_root + '/engines/engine1/config/resque.yml'

resque_config = YAML::load(ERB.new(IO.read(config_file)).result)
Resque.redis = resque_config[rails_env]

rescue2 初始化程序

#root/engines/engine2/config/initializers/resque.yml
rails_root = File.dirname(__FILE__) + '/../..'
rails_env = ENV['RAILS_ENV'] || 'development'
config_file = rails_root + '/engines/engine2/config/resque.yml'

resque_config = YAML::load(ERB.new(IO.read(config_file)).result)
Resque.redis = resque_config[rails_env]

你可以像这样启动 worker

RAILS_ENV=production resque-web rails_root/engines/engine1/config/initializers/resque.rb
RAILS_ENV=production resque-web rails_root/engines/engine2/config/initializers/resque.rb

此外,如果您想使用 单个 redis 和 resque 实例 那么,对于 redis,您可以将其命名空间 https://github.com/resque/redis-namespace 对于resque,您可以为每个引擎定义不同的队列集。