4

ローカルの postgresql データベースに加えて、Rails アプリがリモートの AWS データベースにもアクセスする構成があります。私の問題は、リモート データベースを使用しないテストでも、アプリが毎回リモート データベースへの接続を確立するため、テストの実行速度が遅くなることです。

必要のない rspec テストのためにリモート データベース サーバーへのアクセスを無効にするクリーンな方法はありますか? (そして、それを必要とするテストのためにそれを有効にしますか?)

私が考えることができる最善の方法は、rspec テストを 2 つの別々の部分 (リモート db にアクセスする必要のない部分とアクセスする部分) に分割し、それに応じて環境変数を使用して config/database.yaml の部分を有効または無効にすることです。 .

これを明確にするために、私のconfig/database.yamlファイルには(一部)が含まれています:

# file: config/database.yaml

# Define connections to the external database
remote:
  adapter: mysql
  database: remote
  username: <%= ENV['PRODUCTION_DB_USERNAME'] || 'root' %>
  password: <%= ENV['PRODUCTION_DB_PASSWORD'] || '' %>
  host: awsserver-production-mysql.abcdef1234567890.us-west-2.rds.amazonaws.com
  port: 3306

test:
  adapter: postgresql
  encoding: unicode
  database: MyApp_test
  pool: 5
  username: <%= ENV['POSTGRESQL_DB_USERNAME'] || 'MyApp' %>
  password: <%= ENV['POSTGRESQL_DB_PASSWORD'] || '' %>

(注: ご参考までに、モックを使用しても役に立ちません。リモート db 接続は、テストの実行が開始される前でも確立されます。また、vcr は HTTP 接続のみをインターセプトします。データベース接続は別のメカニズムを使用します。)

アップデート

接続を動的に確立する方法の例を見つけました:

def connect_to_myapp_database
  ActiveRecord::Base.establish_connection(:adapter => "mysql",
                                          :database => 'myapp',
                                          :username => ENV['MYAPP_DB_USERNAME'],
                                          :password => ENV['MYAPP_DB_PASSWORD'],
                                          :host => 'mayapp-mysql.abcdefg123456.us-west-2.rds.amazonaws.com',
                                          :port => 3306,
                                          )
end

これは問題なく動作します-これを使用して、必要なテストのためだけに外部データベースに接続できます。しかし、ここで疑問が生じます。これを行った後、外部データベースから切断するにはどうすればよいでしょうか?

4

1 に答える 1