Rails – 每当gem – 动态值

可以说我有这样的cronjob:

every 1.day, :at => '4:30 am' do runner "MyModel.task_to_run_at_four_thirty_in_the_morning" end 

虽然,我想让’1.day’更具动态性,例如通过管理页面中的表单更改值。

然后它可能看起来像这样:

 every Constant.find(2).value, :at => '4:30 am' do 

要么

 @const = Constant.find(2) every @const.span, :at => @const.time do 

任何人都可以想出如何使这项工作?

显然,这样做的原因是我可以使用存储在我网站上的数据库中的值,就像消息说的那样

  

我从来没有尝试过,但你应该能够通过加载Rails环境来实现这一点,以便你可以使用你的模型类。 假设您的schedule.rb在config目录中, "./application"在schedule.rb中使用require File.dirname(__FILE__) + "./environment" (或Rails 3的"./application" )。

但是,因为无论什么时候都在crontab中生成行,所以对任何Constant进行的任何更改都需要whenever --update-crontab再次运行whenever --update-crontab运行。

谢谢你的空闲! 它完全奏效了。 这是我的解决方案:

 require "#{RAILS_ROOT}/config/environment.rb" @notification_daily = Constant.find_by_key("notification_daily_time_span") every eval(@notification_daily.value), :at => @notification_daily.additional_data do runner "Notification.daily" end @notification_weekly = Constant.find_by_key("notification_weekly_time_span") every eval(@notification_weekly.value), :at => @notification_weekly.additional_data do runner "Notification.weekly" end 

.value可以包含例如: 1.day:sunday
.additional_data包含时间戳,例如: 上午11:00

是的,我知道我需要再次运行–update crontab 🙂
但我会让一个cronjob更新自己,呵呵。

 # In rails 4 require File.expand_path('../..//config/environment.rb', __FILE__) # This is your table by which you will get your new value bid_update = DynamicOfferTime.first # Now Task As every (bid_update.hour_value).hours do puts "This will repeat in every #{bid_update.hour_value} hour" end 

不要忘记随时更新