PG :: UndefinedTable:错误:关系不存在

时间:2014-05-21 20:14:01

标签: ruby-on-rails postgresql rspec devise

我遇到这样的错误:

 Failure/Error: let(:slide) { build :slide }
 ActiveRecord::StatementInvalid:
   PG::UndefinedTable: ERROR:  relation "albums" does not exist at character 13
   : INSERT INTO "albums" ("created_at", "name", "updated_at", "user_id") VALUES ($1, $2, $3, $4) RETURNING "id"

以某种随机方式 - 有时所有传递成功,有时其中一些没有。我通常会进行同样的测试,但是当我只运行它们时,我无法重现这个问题。

当我开始使用gem devisegem apartment进行多租户时,我刚刚转移到Postgres,这对于模式最有效。从那时起,我添加了我的测试around钩子来模拟用户登录:

  given(:user) { create :user }

  around :each do |scenario|
    login_and_switch_schema user
    scenario.run
    destroy_users_schema user
    destroy_user user
  end

以上所有助手均在 spec / support / auth_helpers.rb 中定义。

我不确定还有什么是重要的,所以我只是提交了github here

我正在测试它:

rake db:test:prepare && rspec -X ./spec/models/ ./spec/controllers/ ./spec/features/

(关闭spork没有帮助。)

有什么想法吗?我觉得头晕目眩,不知道该怎么做。提前谢谢。

更新

在将每个spec文件的around挂钩更改为:

之后,我不会再出现这些错误
before(:all) do
  @user = create :user
end

after(:all) do
  destroy_users_schema @user
  destroy_user @user
end

before(:each) do      
  login_and_switch_schema @user
end

同时它的工作速度是原来的两倍。无论如何,这更像是一种解决方法,因为根本原因仍然让我感到困惑。

0 个答案:

没有答案