RSpec,Spork& Postgres错误:准备好的声明“a1”已经存在

时间:2012-12-13 16:32:31

标签: ruby-on-rails-3 postgresql rspec2

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

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

最初,它每天只发生几次,但最近,它已经开始每3-4次测试运行,这会减慢我们的开发工作。

有没有办法在spec_helper.rb文件内的某处重置/删除PostgreSQL中的预准备语句?

2 个答案:

答案 0 :(得分:1)

搜索PostgreSQL docs并在spec_helper.rb内的不同位置进行了大量的试错测试后,我终于想出我可以添加以下内容来删除所有现有的预备语句而且我从那以后没有看到错误:

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

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

  # ... other code
end

答案 1 :(得分: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

(推荐here)。

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