2012-03-19 20 views
7

मैं किसी अन्य कार्य से rake db:test:prepare निष्पादित करने का प्रयास कर रहा हूं।निष्पादन डीबी: परीक्षण: किसी अन्य रेक कार्य से तैयार करें

namespace :db do 
    namespace :populate do 
    desc "Seed development database" 
    task development: :environment do 
     puts "Kill local server" 
     %x{ ps xauwww | grep -i --regex="[t]hin" | awk '{print $2}' | xargs kill } 
     puts "Resetting development database" 
     Rake::Task['db:reset'].execute 
     puts "Migrating development database" 
     Rake::Task['db:migrate'].execute 
     puts "Populating development database" 
     Rake::Task['db:populate'].execute 
     puts "Pepare test database" 
     Rake::Task['db:test:prepare'].execute 
     puts "Start local server" 
     system 'thin -d start' 
    end 
    … 
end 

निष्पादन के बजाय आवेषण का उपयोग करने से मदद नहीं मिलती है।

task example: :environment do 
    Rake::Task['db:test:prepare'].execute 
end 

जब मैं rake db:populate:development चलाने के लिए, सभी कार्य Rake::Task['db:test:prepare'].execute के अलावा चलाए जा रहे हैं: यह ठीक काम करने के लिए अगर मैं यह अपने आप में परिभाषित लगता है। उस कमांड के विकास लॉग में कोई गतिविधि नहीं है, लेकिन यह अगले कार्य को चलने से रोक नहीं सकती है (सर्वर शुरू करना)। आमतौर पर, जब मैं db:test:prepare चलाता हूं तो मैं कुछ SQL कथन देखता हूं।

नोट्स:

$ rails -v 
Rails 3.2.2 

$ ruby -v 
ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin11.3.0] 

$ uname -a 
Darwin hook 11.3.0 Darwin Kernel Version 11.3.0: Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64 

उत्तर

0

इतना है कि यह निर्भर कार्य पहले से चलाता है, .execute के बजाय Rake::Task['db:test:prepare'].invoke की कोशिश करो। लेकिन अगर यह पहले नहीं बुलाया जाता है तो यह केवल कार्य को आमंत्रित करता है।

देखें: this

+0

मेरे पास एक ही समस्या है, और यह मेरे लिए इसे हल नहीं करता है। – jrdioko

1

मैं जानता हूँ कि यह कर का सही तरीका नहीं है, लेकिन मैं इसी तरह की समस्याओं रहा था और इसका उपयोग करने बुला समाप्त हो गया:

`rake db:test:prepare` 

यह एकमात्र तरीका यह है कि मेरे लिए काम करना प्रतीत होता था।

0

रेक कार्य संभवतः इस लाइन https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L364 और ActiveRecord::Base.configurations खाली हो जाता है। यह चर सेट किया गया है https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L5 (देखें https://github.com/rails/rails/blob/370e1ad3f1f30f955bd781f0ecd113409b8ccf8f/activerecord/lib/active_record/tasks/database_tasks.rb#L21)।

क्या कोई मौका है कि आपके database.yml में वर्तमान वातावरण गुम है या कॉन्फ़िगरेशन को साफ़ करने वाला कुछ और है?

+0

अच्छा विचार है, लेकिन यह भी नहीं है। 'Custom.yml' सही तरीके से स्थापित किया गया है और मेरे कस्टम रेक कार्य में 'ActiveRecord :: Base.configurations.blank?' की जांच कर रहा है 'झूठा'। – jrdioko

+0

आप डीबग स्टेटमेंट कहां रख रहे हैं? क्या आप लाइन https://github.com/rails/rails/blob/master/activerecord/lib/active_record/railties/databases.rake#L364 से पहले इसे तुरंत जोड़ने का प्रयास कर सकते हैं? – gwintrob

+0

मैंने अभी कोशिश की और अभी भी 'झूठी' मिली। और डीबगर के साथ मैं कदम उठाने में सक्षम था और पुष्टि करता था कि यह 'जब तक' खंड में प्रवेश नहीं कर रहा था (और वहां से रेल इंटर्नल्स में कदम रखा गया जो मुझे समझ में नहीं आता)। – jrdioko

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