Ruby on rails PG::DependentObjectsStillExist:使用rspec时出错
当我跑的时候Ruby on rails PG::DependentObjectsStillExist:使用rspec时出错,ruby-on-rails,ruby,rspec,queue,rails-postgresql,Ruby On Rails,Ruby,Rspec,Queue,Rails Postgresql,当我跑的时候 $rspec "/any_file" rspec加载schema.rb文件以设置数据库 我的理解是,当涉及到这一行时 create_table "queue_classic_jobs", force: true do |t|; end Rspec运行一个 DROP TABLE "queue_classic_jobs" 指挥部 它引发了这个错误 PG::DependentObjectsStillExist: ERROR: cannot drop table queue_cla
$rspec "/any_file"
rspec加载schema.rb文件以设置数据库
我的理解是,当涉及到这一行时
create_table "queue_classic_jobs", force: true do |t|; end
Rspec运行一个
DROP TABLE "queue_classic_jobs"
指挥部
它引发了这个错误
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
但是怎么做呢?你在运行Rails>=4.1吗?有一个新特性,ActiveRecord尝试保持测试模式与schema.rb同步,而无需重新加载整个数据库。您可以在此处阅读: 不幸的是,它不适用于外键:。您可以通过在config/environments/test.rb末尾添加此行来禁用它:
config.active_record.maintain_test_schema = false
可能的解决方案:在rails控制台中运行:
ActiveRecord::Base.connection.execute('DROP TABLE“queue\u classic\u jobs”CASCADE')
。这将消除依赖于表的对象。不,但我将在几天后升级到4.1。我将调查它,然后+1回答一个老问题!