我对在Rails中使用异步作业(job)还相当陌生,我刚刚习惯Sidekiq.
例如,当我编写连接到side kiq以清除队列的rake任务时,我看到一组队列,其中包括一些定制的命名队列,这些队列是我不久前在我的机器上作为另一个应用程序的一部分创建的.这些队列不包含由我的应用程序启动的作业(job)(我一直在用邮件程序测试这一点)
当我从Rails控制台连接到Sidekiq时,我得到了Sidekiq实例,当我调度作业(job)时,它似乎正在被应用程序使用,并且可以看到我调度的邮件作业(job).
从这两个场景中判断Sidekiq.redis_info
可以得到几乎相同的信息,并且使用的Redis服务器也是相同的.当我关闭redis服务器时,我无法从任务或控制台连接到Sidekiq.
您知道为什么会发生这种情况吗?我如何才能从rake任务连接到正确的Sidekiq实例?
使用Ruby 2.7.8,rails 5.2.6,这是我在rails中的idekiq的初始化器:
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