我对Rails中的异步作业相当陌生,我刚刚习惯了sidekiq。
例如,当我编写一个连接到sidekiq的rake任务来清除一个队列时,我看到一组队列,其中包括一些自定义命名的队列,这些队列是我不久前在我的机器上作为另一个应用程序的一部分创建的。这些队列不包含由我的应用程序启动的任何作业(我已经用一个mailer测试过了)
当我从rails控制台连接到sidekiq时,我得到了sidekiq示例,当我调度一个作业时,它似乎正在被应用程序使用,并且可以看到我调度的mailer作业。
从这两个场景中检查Sidekiq.redis_info
可以得到几乎相同的信息,并且使用的redis服务器是相同的。当我关闭redis服务器时,我无法从任务或控制台连接到Sidekiq。
有什么想法为什么会发生这种情况,以及我如何从我的rake任务连接到正确的Sidekiq示例?
使用Ruby 2.7.8,rails 5.2.6,这是我在rails中的sidekiq的初始化器:
rails_root = Rails.root || File.dirname(__FILE__) + '/../..'
rails_env = Rails.env || 'development'
redis_config = YAML.load_file(rails_root.to_s + '/config/redis.yml')
redis_config.merge! redis_config.fetch(Rails.env, {})
redis_config.symbolize_keys!
Sidekiq.configure_server do |config|
config.redis = { url: "redis://#{redis_config[:host]}:#{redis_config[:port]}/12", namespace: "one-api" }
config.super_fetch!
end
Sidekiq.configure_client do |config|
config.redis = { url: "redis://#{redis_config[:host]}:redis_config[:port]}/12", namespace: "one-api"
}
end
1条答案
按热度按时间4xrmg8kj1#
Redis是持久化作业的地方,所以如果两个应用程序都被配置为将作业存储在同一个redis位置,那么无论你运行哪个版本的sidekiq,旧的作业自然都会在那里。
理想情况下,您应该为新应用程序使用新的/不同的redis DB。有many different ways来为Sidekiq配置redis,但是你感兴趣的是数字,所以不管你使用什么(
12
?)你想使用默认redis安装中的其他15个DB之一。如果你不再使用旧的应用程序,那么你也可以离开你的配置,只是从适当的数据库删除所有的键(从
12
数据库的shell命令行):