在我们的PostgreSQL支持的Rails项目中,当使用spork运行rspec时,有时我们会收到以下错误:
ActiveRecord::StatementInvalid:
PG::Error: ERROR: prepared statement "a1" already exists
最初,它每天只发生几次,但最近,它已经开始每3-4次测试运行,这会减慢我们的开发工作。
有没有办法在spec_helper.rb
文件内的某处重置/删除PostgreSQL中的预准备语句?
答案 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)。
如果你有或类似,请尝试删除它。