2011-01-05 15 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

मैं कभी नहीं की कोशिश की है की तरह अपनी साइट पर डेटाबेस में संग्रहीत मूल्यों इस्तेमाल कर सकते हैं, हो सकता है, लेकिन आप ऐसा करने में सक्षम होना चाहिए जब भी आप अपने मॉडल वर्गों का उपयोग कर सकते हैं तो रेल वातावरण को लोड करके यह। अपने शेड्यूल.आरबी में बस require File.dirname(__FILE__) + "./environment" (या "./application" रेल के लिए) का उपयोग करें, अपना शेड्यूल मान लें। आरबी कॉन्फ़िगर डीआईआर में है।

हालांकि, जब भी क्रॉन्टाब में लाइनें उत्पन्न होती हैं, तब से Constant में किए गए किसी भी बदलाव के लिए whenever --update-crontab फिर से चलने की आवश्यकता होगी।

10

धन्यवाद idlefingers! यह पूरी तरह से काम किया। यहाँ मेरी समाधान है:

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 बजे

और, मुझे पता है कि मुझे --update crontab फिर से चलाने की आवश्यकता है :)
लेकिन मैं एक cronjob खुद को अद्यतन कर दूंगा, हे।

+0

कि Rails4 में मेरे लिए काम नहीं करता। आवश्यक कथन काम नहीं करता है। कोई विचार मुझे बदलने की क्या ज़रूरत है? – ShivamD

+1

मैंने अभी तक रेल 4 की कोशिश नहीं की है, लेकिन मुझे लगता है कि RAILS_ROOT को Rails.root में बदल दिया गया है। – Frexuz

+0

@ फ़्रेक्सज़: इस पंक्ति का क्या अर्थ है, क्या आप इससे छुटकारा पाने में मेरी सहायता कर सकते हैं। अधिसूचना_weekly = Constant.find_by_key ("अधिसूचना_weekly_time_span") - अधिसूचना_weekly_time_span – SSR

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

मैं रेल 4 का भी उपयोग करता हूं, 'आवश्यकता है' # {RAILS_ROOT} /config/environment.rb "' ठीक काम करता है। – Frexuz

+0

धन्यवाद, लेकिन मुझे इस मुद्दे का सामना करना पड़ा और ऊपर से हल किया गया। – Mukesh

संबंधित मुद्दे