2

在我们的 PostgreSQL 支持的 Rails 项目中,当使用 spork 运行 rspec 时,有时我们会收到以下错误:

ActiveRecord::StatementInvalid:
   PG::Error: ERROR:  prepared statement "a1" already exists

最初,它每天只发生几次,但最近,它开始每 3-4 次测试运行发生一次,这让我们的开发工作变得缓慢。

有没有办法在我们spec_helper.rb文件的某个地方重置/删除 PostgreSQL 中准备好的语句?

4

2 回答 2

2

在搜索PostgreSQL 文档并在 PostgreSQL 中的不同位置对其进行了大量的试验和错误测试后spec_helper.rb,我终于发现我可以添加以下内容来删除所有现有的准备好的语句,并且我还没有看到错误:

RSpec.configure do |config|
  # ... other code

  config.after(:suite) do
    ActiveRecord::Base.connection.execute("DEALLOCATE ALL")
  end

  # ... other code
end
于 2012-12-13T16:32:31.047 回答
1

如果你正在做类似的事情,你可以得到这个:

  class ActiveRecord::Base
    mattr_accessor :shared_connection
    @@shared_connection = nil
    def self.connection
      @@shared_connection || retrieve_connection
    end
  end
  ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection

这里推荐)。

如果你有那个或类似的,请尝试删除它。

于 2013-01-11T03:24:21.083 回答