我有两个应用程序在Heroku上运行,指向同一个数据库,第一个负责用户界面,第二个负责管理员界面,我正在使用带有Redis的Sidekiq处理后台作业。我添加了一个工作进程,通过设置环境变量指向相同的Redis Addon,我能够共享“redis-server”。现在我希望也能够共享worker,因为添加额外的worker将会增加成本。
请建议一下,这是否可能?
我有两个应用程序在Heroku上运行,指向同一个数据库,第一个负责用户界面,第二个负责管理员界面,我正在使用带有Redis的Sidekiq处理后台作业。我添加了一个工作进程,通过设置环境变量指向相同的Redis Addon,我能够共享“redis-server”。现在我希望也能够共享worker,因为添加额外的worker将会增加成本。
请建议一下,这是否可能?
Sidekiq::Client.push('class' => 'SomeWorker', 'args' => [1,2,3])
请注意,'class' 是一个字符串,因此 SomeWorker 实际上可以在另一个应用程序中定义。虽然Mike的答案仍然是一个安全的选择,但是在每次将此类排队时都必须内联包含所有相关的sidekiq选项有点不太好看。
这里有一篇博客文章详细介绍了这个问题,并提供了第二种方法:
http://coderascal.com/ruby/using-sidekiq-across-different-applications/
基本上,另一种选择是在排队应用程序上拥有一个“代理”类,控制sidekiq的行为(队列,重试等)。然后,在接收/取消队列应用程序上会有一个匹配的类名。使用3个不同的Heroku应用程序怎么样?
即使2和3使用相同的代码库,您也可以拥有2个不同的Heroku应用程序。一个启动管理员,一个实际启动sidekiq。这样能解决您的问题吗?
rescue in irb_binding' NoMethodError (undefined method
get_sidekiq_options' for "SomeWorker":String) - Shanky Munjal