如果 Sidekiq 未处于 运行 状态 - Rails,则自动启动它
Start Sidekiq automatically if it is not in running state - Rails
我正在为我的 cron 作业使用 redis server
和 sidekiq
,但有时 sidekiq
会在后端自动终止。
我想从我的控制器的操作中重新启动 sidekiq
或在它停止时自动重新启动而不停止我的 rails 应用程序服务器。
请建议我如何解决这个问题?
启动外部程序不应该是您的应用程序的责任。
您可以检查 sidekiq 和 redis 服务器 运行 或 运行 通过 :
def redis_connected?
!!Sidekiq.redis(&:info) rescue false
end
def sidekiq_connected?
ps = Sidekiq::ProcessSet.new
ps.size > 0 ? true : false
end
你也可以从你的控制器开始,但这不是一个好方法,因为它会启动 sidekiq 但会杀死 rails 服务器。
def start_sidekiq
system "redis-server &" if !redis_connected?
system "bundle exec sidekiq -d" if !sidekiq_connected?
flash[:sidekiq_notification]="Starting server... Please refresh after few seconds"
redirect_to :back
end
或安装并使用服务器监控工具
我认为这是错误的做法。
我建议你设置一个监控系统,它会自动启动你失败的工作人员 - 你可以使用 God, Monit 或任何你喜欢的。
但是,如果您 确实 需要它,您可以从 ruby 执行系统调用 - 只需将其包装在 ` ` 或 %x{}
(例如 %x{ bundle exec sidekiq }
)
我正在为我的 cron 作业使用 redis server
和 sidekiq
,但有时 sidekiq
会在后端自动终止。
我想从我的控制器的操作中重新启动 sidekiq
或在它停止时自动重新启动而不停止我的 rails 应用程序服务器。
请建议我如何解决这个问题?
启动外部程序不应该是您的应用程序的责任。
您可以检查 sidekiq 和 redis 服务器 运行 或 运行 通过 :
def redis_connected?
!!Sidekiq.redis(&:info) rescue false
end
def sidekiq_connected?
ps = Sidekiq::ProcessSet.new
ps.size > 0 ? true : false
end
你也可以从你的控制器开始,但这不是一个好方法,因为它会启动 sidekiq 但会杀死 rails 服务器。
def start_sidekiq
system "redis-server &" if !redis_connected?
system "bundle exec sidekiq -d" if !sidekiq_connected?
flash[:sidekiq_notification]="Starting server... Please refresh after few seconds"
redirect_to :back
end
或安装并使用服务器监控工具
我认为这是错误的做法。
我建议你设置一个监控系统,它会自动启动你失败的工作人员 - 你可以使用 God, Monit 或任何你喜欢的。
但是,如果您 确实 需要它,您可以从 ruby 执行系统调用 - 只需将其包装在 ` ` 或 %x{}
(例如 %x{ bundle exec sidekiq }
)