2013-10-21 8 views
6

का उपयोग करते समय मैं सेटअप करने के लिए schema.rb फ़ाइल मेंपीजी :: DependentObjectsStillExist: त्रुटि जब rspec

$rspec "/any_file" 

rspec भार डेटाबेस चलाते हैं।

मेरे समझ है कि जब यह इस लाइन के लिए आता है

create_table "queue_classic_jobs", force: true do |t|; end 

Rspec एक

DROP TABLE "queue_classic_jobs" 

आदेश चलाता है।

यह trows इस त्रुटि

PG::DependentObjectsStillExist: ERROR: cannot drop table queue_classic_jobs because 
other objects depend on it (ActiveRecord::StatementInvalid) 
DETAIL: function lock_head(character varying) depends on type queue_classic_jobs 
function lock_head(character varying,integer) depends on type queue_classic_jobs 
HINT: Use DROP ... CASCADE to drop the dependent objects too. 
: DROP TABLE "queue_classic_jobs" 

यह मेरे लिए लग रहा है मैं rspec बनाने के लिए

DROP TABLE "queue_classic_jobs" CASCADE 

लेकिन यह कैसे है की तरह?

+1

संभव समाधान: रेल सांत्वना समय में: आप config/वातावरण/test.rb के अंत में इस पंक्ति जोड़कर यह निष्क्रिय कर सकते हैं 'ActiveRecord :: Base.connection.execute ('ड्रॉप तालिका" queue_classic_jobs " CASCADE ') '। यह उन वस्तुओं से छुटकारा पाता है जो टेबल पर निर्भर करते हैं। –

उत्तर

10

क्या आप रेल> = 4.1 चला रहे हैं? एक नई सुविधा है जहां ActiveRecord पूरे डेटाबेस को पुनः लोड किए बिना schema.rb के साथ सिंक में अपनी टेस्ट स्कीमा को रखने की कोशिश करता है। आप इसके बारे में यहां पढ़ सकते हैं: http://guides.rubyonrails.org/4_1_release_notes.html#railties-notable-changes

दुर्भाग्यवश यह विदेशी कुंजी के साथ काम नहीं करता है: https://github.com/rails/rails/issues/14708

config.active_record.maintain_test_schema = false 
+1

नहीं, लेकिन मैं कुछ दिनों में 4.1 तक अपग्रेड कर रहा हूं। पुराने प्रश्न पर जवाब देने के लिए +1 देखेंगे! –

+0

बिल्कुल सही, धन्यवाद! – recurser

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