2011-01-05 53 views
7

可以说我有这样一个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 

谁能想出如何使这项工作的想法?

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

<%= "The next update is in less than #{@const.time}" #or something similar %> 

回答

8

我从来没有尝试过,但你应该能够做到这通过在任何时候加载Rails环境来让你可以使用你的模型类。只需在schedule.rb中使用require File.dirname(__FILE__) + "./environment"(或Rails 3的"./application"),假设您的schedule.rb位于配置目录中。

但是,由于无论何时都在crontab中生成行,因此对任何Constant所做的任何更改都需要再次运行whenever --update-crontab

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 

.value的可以包含例如:1.day:周日
.additional_data包含时间戳,例如:11:00

是的,我知道我需要运行- 更新crontab再次:)
但我会让一个cronjob更新自己,嘿嘿。

+0

这不适合我的工作Rails4。 require语句不起作用。任何想法我需要改变什么? – ShivamD 2013-11-08 23:08:04

+1

我还没有尝试Rails 4,但我认为RAI​​LS_ROOT已更改为Rails.root。 – Frexuz 2013-11-29 20:04:21

+0

@Frexuz:这行是什么意思,你能帮我摆脱它吗? notification_weekly = Constant.find_by_key(“notification_weekly_time_span”) - 什么是notification_weekly_time_span – SSR 2015-06-19 06:19:38

6
# 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 

不要忘了更新,每当

+0

我也使用rails 4,'require“#{RAILS_ROOT} /config/environment.rb”'在这里工作正常。 – Frexuz 2015-06-26 21:09:07

+0

谢谢,但我面临这个问题,并通过上述解决。 – Mukesh 2015-06-27 13:27:02