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