2

PostgreSQLでサポートされているRailsプロジェクトで、sporkを使用してrspecを実行すると、次のエラーが発生することがあります。

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

当初は1日に数回しか発生しませんでしたが、最近では3〜4回のテスト実行ごとに発生し始めており、開発作業が遅くなっています。

ファイル内のどこかでPostgreSQLのプリペアドステートメントをリセット/削除する方法はありspec_helper.rbますか?

4

2 に答える 2

2

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 に答える