一个铁路应用程序可以使用多个 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,您可以为每个引擎定义不同的队列集。
我有我的 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,您可以为每个引擎定义不同的队列集。