2013-10-21 21 views
6

Khi tôi chạyPG :: DependentObjectsStillExist: ERROR khi sử dụng rspec

$rspec "/any_file" 

tải rspec trong file schema.rb để thiết lập cơ sở dữ liệu.

hiểu biết của tôi là khi nói đến dòng này

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

RSpec chạy một lệnh

DROP TABLE "queue_classic_jobs" 

.

Nó trows lỗi này

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" 

Có vẻ với tôi như tôi phải làm rspec

DROP TABLE "queue_classic_jobs" CASCADE 

Nhưng làm thế nào?

+1

giải pháp có thể xảy ra: trong đường ray giao diện điều khiển chạy: 'ActiveRecord :: Base.connection.execute (DROP TABLE "queue_classic_jobs" ' CASCADE ') '. Điều này loại bỏ các đối tượng phụ thuộc vào bảng. –

Trả lời

10

Bạn đang chạy Rails> = 4.1? Có một tính năng mới mà ActiveRecord cố gắng giữ lược đồ thử nghiệm của bạn đồng bộ với schema.rb mà không cần tải lại toàn bộ cơ sở dữ liệu. Bạn có thể đọc về nó ở đây: http://guides.rubyonrails.org/4_1_release_notes.html#railties-notable-changes.

Rất tiếc, nó không hoạt động với khóa ngoài: https://github.com/rails/rails/issues/14708. Bạn có thể vô hiệu hóa nó bằng cách thêm dòng này vào cuối config/môi trường/test.rb:

config.active_record.maintain_test_schema = false 
+1

Không, nhưng tôi nâng cấp lên 4.1 trong vài ngày. Sẽ xem xét nó sau đó +1 để trả lời về một câu hỏi cũ! –

+0

Hoàn hảo, cảm ơn! – recurser

Các vấn đề liên quan