Ruby on rails 时钟工作在rails中几分钟后重新启动作业

Ruby on rails 时钟工作在rails中几分钟后重新启动作业,ruby-on-rails,ruby,ruby-on-rails-5,clockwork,Ruby On Rails,Ruby,Ruby On Rails 5,Clockwork,我使用时钟工作者宝石为后台进程 我有一个包含键和值的配置表 我的clock.rb文件 运行worker时:config/clock.rb 这很好,但当我从配置更改时间时, 如果不重新启动时钟工作者文件,工作者将如何工作?我可以想到: module Clockwork GET_TIME = -> { Configuration.find_by(key: "time") } SETTINGS = { time: GET_TIME.() } every(1.minutes, 'res

我使用时钟工作者宝石为后台进程

我有一个包含键和值的配置表

我的clock.rb文件

运行worker时:config/clock.rb

这很好,但当我从配置更改时间时, 如果不重新启动时钟工作者文件,工作者将如何工作?

我可以想到:

module Clockwork
  GET_TIME = -> { Configuration.find_by(key: "time") }
  SETTINGS = { time: GET_TIME.() }
  every(1.minutes, 'reset settings') do 
    Clockwork::SETTINGS[:time] = Clockwork::GET_TIME.()
  end

  handler do |job|  
    puts "Running #{job}" 
  end

  if SETTINGS[:time].present?
    min = SETTINGS[:time].value.to_i     
    every(min.minutes, 'calculate user details') do
      User.calculate_time
    end
  end
end

这意味着
Configuration
缓存配置。您应该找到一种方法来强制它重新加载配置。
module Clockwork
  GET_TIME = -> { Configuration.find_by(key: "time") }
  SETTINGS = { time: GET_TIME.() }
  every(1.minutes, 'reset settings') do 
    Clockwork::SETTINGS[:time] = Clockwork::GET_TIME.()
  end

  handler do |job|  
    puts "Running #{job}" 
  end

  if SETTINGS[:time].present?
    min = SETTINGS[:time].value.to_i     
    every(min.minutes, 'calculate user details') do
      User.calculate_time
    end
  end
end