2011-11-02 10 views
9

schedule.rb फ़ाइल में बयान recongize नहीं करता है:जब भी मणि schedule.rb फ़ाइल: RAILS_ROOT चर

require "#{RAILS_ROOT}/config/environment.rb" 

every "10 10 2 * * *" do 
     command "mysqldump -u #{@db_username} -p#{@db_password} --single-transaction #{@db_name} > #{@backup_Path}/#{@db_name}.sql 2> log/error_crontab.log" 
end 

जब मैं निष्पादित करने के लिए जब भी टर्मिनल से सीएमडी, निम्न त्रुटि हो रही है कोशिश:

config/schedule.rb:48:in `initialize': uninitialized constant Whenever::JobList::RAILS_ROOT (NameError) 
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/job_list.rb:19:in `instance_eval' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/job_list.rb:19:in `initialize' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever.rb:16:in `new' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever.rb:16:in `cron' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/command_line.rb:40:in `run' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/lib/whenever/command_line.rb:7:in `execute' 
    from /usr/local/lib/ruby/gems/1.9.1/gems/whenever-0.7.0/bin/whenever:38:in `<top (required)>' 
    from /usr/local/bin/whenever:19:in `load' 
    from /usr/local/bin/whenever:19:in `<main>' 

मैं नौकरी निर्धारित करने के लिए फॉर्म से डायनामिक मान प्राप्त करने के लिए आवश्यक कथन का उपयोग कर रहा हूं। कृपया इस मुद्दे को हल करने में मदद करें?

नोट: मैं निम्नलिखित stackoverflow प्रश्नों को देखा है: How to detect Rails environment inside whenever

गतिशील मूल्यों को प्राप्त करने के लिए इस सूत्र के बाद, लेकिन समस्या का सामना बयान की आवश्यकता के साथ। Rails - Whenever gem - Dynamic values

Ruby/Rails - Whenever gem - Loop cron tasks

config file in schedule.rb with Rails Whenever gem?

धन्यवाद, सुधीर C.N.

+0

रेल 3 'Rails.root' के पक्ष में' RAILS_ROOT' को हटा देता है। क्या आपने अभी तक कोशिश की है? – polarblau

+0

Rails.root भी एक ही त्रुटि को फेंकता है – sudhir

उत्तर

28

जब भी रेल की आवश्यकता नहीं होती है या निर्भर नहीं होती है, तो जब यह चलता है, तो RAILS_ROOT परिभाषित नहीं किया जाता है, हालांकि जब भी शेड्यूल होता है। आरबी आमतौर पर /config/schedule.rb में रखा जाता है, तो हम यह मान सकते हैं कि यह एक रेल परियोजना में है, और इस तरह हमारे अपने RAILS_ROOT सेट:

# in schedule.rb 
RAILS_ROOT = File.dirname(__FILE__) + '/..' 

संपादित करें: मामले कि आप वास्तव में रेल लोड की जरूरत है, ऐसा करते हैं:

# in schedule.rb 
# this will require config/environment and load your entire rails environment 
require File.expand_path(File.dirname(__FILE__) + "/environment") 
+0

एक समान दृष्टिकोण यहां वर्णित है: http://groups.google.com/group/whenever-gem/browse_thread/thread/e745f2fb3db7cd49 – polarblau

+0

मुझे डेटाबेस उपयोगकर्ता आईडी और पासवर्ड से पासवर्ड मिल रहा है , इसलिए उन्हें अनुसूची में पास करने के लिए। आरबी, मुझे अनुसूची.आरबी में रेल पर्यावरण को लोड करने की आवश्यकता है। – sudhir

+0

@ सुधीर उस मामले में, मैंने वास्तव में अपने उत्तर को अद्यतन करने और रेल को बूट करने के लिए अद्यतन किया है। – Unixmonkey

18

जब भी डेवलपर पहले से ही इस सवाल का जवाब , इसे देखें https://github.com/javan/whenever/issues/81

जावन जब भी आपके रेल पर्यावरण को लोड करने का प्रयास नहीं करता है। हालांकि, जब भी इसे निष्पादित किया गया था, तो यह स्वचालित रूप से निर्देशिका में पथ चर सेट करता है। अपने schedule.rb फ़ाइल में

require File.expand_path(File.dirname(__FILE__) + "/../config/environment") 

: के साथ प्रयास करें 4

set :output, "#{path}/log/cron.log" 
+1

धन्यवाद, स्वीकृत उत्तर से बहुत साफ! – Toni

+1

आप अच्छे हैं, मुझे कभी-कभी किसी समस्या का हल ढूंढना मुश्किल होता है, लेकिन जब मुझे अंत में यह पता चलता है, तो मैं इसे दूसरों को समय बचाने में मदद करने के लिए साझा करना चाहता हूं: डी ... –

3

रेल में: यह सिर्फ एक ही काम करना चाहिए। इस तरह आपके पास अपने सभी सक्रिय-रिकॉर्ड मॉडल और प्रारंभकर्ताओं तक पहुंच भी है।

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