14

データベースクリーナーを使用したテストスイートで、次のエラーがランダムに発生します。関連すると思われる次の 2 つのコード スニペットと組み合わせて、データベース クリーナーを使用しています。

エラー:

Mysql2::Error: This connection is in use by: #<Thread:0x00000017bbf2f8 sleep>: TRUNCATE TABLE `cr_contacts`;

共有 DB 接続(考えられる原因)

class ActiveRecord::Base
  mattr_accessor :shared_connection
  @@shared_connection = nil

  def self.connection
    @@shared_connection || retrieve_connection
  end
end

# Forces all threads to share the same connection. This works on
# Capybara because it starts the web server in a thread.
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection
4

1 に答える 1

9

エラーは、他のスレッドがまだ接続を使用している間に、DB クリーナーが切り捨てを行いたいことを示しています。これはおそらく、セレンとの統合テストで発生します。

データベースのクリーニングに 2 つのメカニズムを使用しているようです。

  • 共有接続パッチを使用したトランザクション フィクスチャ
  • データベースクリーナーによる切り捨て

これはよくありません。DB クリーナーを使用するには、トランザクション フィクスチャをオフにして、共有接続パッチを削除します。Avdi Grimm によるこの素晴らしい記事で説明されている方法で構成することをお勧めします

于 2013-08-24T15:00:18.220 に答える