Fre*_*xuz 8 ruby cron gem ruby-on-rails whenever
可以说我有这样的cronjob:
every 1.day, :at => '4:30 am' do
runner "MyModel.task_to_run_at_four_thirty_in_the_morning"
end
Run Code Online (Sandbox Code Playgroud)
虽然,我想让'1.day'更具动态性,例如通过管理页面中的表单更改值.
然后它可能看起来像这样:
every Constant.find(2).value, :at => '4:30 am' do
Run Code Online (Sandbox Code Playgroud)
要么
@const = Constant.find(2)
every @const.span, :at => @const.time do
Run Code Online (Sandbox Code Playgroud)
任何人都可以想出如何使这项工作?
显然,原因是我可以使用我网站上数据库中存储的值,就像消息说的那样
<%= "The next update is in less than #{@const.time}" #or something similar %>
Run Code Online (Sandbox Code Playgroud)
Fre*_*xuz 10
谢谢你的空闲!它完全奏效了.这是我的解决方案:
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
Run Code Online (Sandbox Code Playgroud)
.value可以包含例如:1.day或:sunday
.additional_data包含时间戳,例如:上午11:00
是的,我知道我需要再次运行--update crontab :)
但是我会让cronjob更新自己,呵呵.
我从来没有尝试过,但你应该能够通过加载Rails环境来实现这一点,以便你可以使用你的模型类.只需在schedule.rb中使用require File.dirname(__FILE__) + "./environment"(或"./application"用于Rails 3),假设您的schedule.rb在config目录中.
但是,由于无论何时都在crontab中生成行,因此对任何行进行的任何更改Constant都需要whenever --update-crontab再次运行.
# 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3355 次 |
| 最近记录: |