我有一个漫长而永无止境的工作,即应该始终保持运行的rake任务。 (它是服务器端一直在监听的faye pub-sub客户端)。当应用程序部署在服务器上时,作业已创建并正常工作,但问题就是这样,旧作业不会在每个新构建中被杀死,因此当我第二次部署时,有2个作业。我经历了sidekiq api,我们可以通过查找工作人员来停止队列中的所有作业,但是在同一台服务器上运行其他应用程序,如果我删除所有繁忙的作业,我可能最终会影响其他应用程序。
这是我的工作人员 应用程序/工人/ subscriber.rb
require 'rake'
Rake::Task.clear
Faye::Application.load_tasks
class Subscriber
include Sidekiq::Worker
def perform
Rake::Task['faye:subscriber'].invoke"
end
end
这是我的初始化程序/ sidekiq.rb
Sidekiq.configure_server do |config|
config.redis = { url: 'redis://localhost:6379' }
end
Sidekiq.configure_client do |config|
config.redis = { url: 'redis://localhost:6379' }
Rails.application.config.after_initialize do
Subscriber.perform_async
end
end
有什么解决方案吗?还是我朝错误的方向走?任何帮助将不胜感激。谢谢你:))
答案 0 :(得分:0)
你走向错误的方向。 Sidekiq不适合永久或不断运行的工作。从rake任务中创建一个合适的服务。