私は最新のRoRアプリケーションをHeroku
に配備し始めました。私はこれまで、PostgreSQLの使用を開始する必要がありました。以前はSQLiteとMySQLを使用していました。私は3つのデータベースすべてに対して継続的に赤/緑のテストを行い、開発の熱中で何も壊していないことを確かめるために死んで簡単な方法を望んでいました。RoR:複数のデータベースに対してアプリをテストするにはどうすればよいですか?
どうすればよいですか?
私は最新のRoRアプリケーションをHeroku
に配備し始めました。私はこれまで、PostgreSQLの使用を開始する必要がありました。以前はSQLiteとMySQLを使用していました。私は3つのデータベースすべてに対して継続的に赤/緑のテストを行い、開発の熱中で何も壊していないことを確かめるために死んで簡単な方法を望んでいました。RoR:複数のデータベースに対してアプリをテストするにはどうすればよいですか?
どうすればよいですか?
@awendtが私自身の質問に答えることができたことを親切に指摘しました。
レシピはかなり単純です。秘密は、環境変数を使用して、どのデータベースを使用するかをRailsに伝えることです。
test:
<% if (ENV["RAILS_DB"] == "PostgreSQL") %>
adapter: postgresql
encoding: unicode
database: bd_test
pool: 5
username: <%= ENV['POSTGRESQL_USERNAME'] || 'root' %>
password: <%= ENV['POSTGRESQL_PASSWORD'] || '' %>
<% elsif (ENV["RAILS_DB"] == "MySQL") %>
adapter: mysql
encoding: utf8
reconnect: false
database: bd_test
pool: 5
username: <%= ENV['MYSQL_USERNAME'] || 'root' %>
password: <%= ENV['MYSQL_PASSWORD'] || '' %>
socket: <%= ENV['MYSQL_SOCKET'] || '/tmp/mysql.sock' %>
<% else %>
# default to SQLite
adapter: sqlite3
database: db/test.sqlite3
pool: 5
timeout: 5000
<% end %>
注1:私はテスト環境のためにそれを示してきた
config/database.yml
で 注2:ユーザー名とパスワードを設定するために環境変数を使用する必要はありません。これは、一般的に表示されるファイルでパスワードが公開されないようにするためです。次のように
同様に、(バージョン番号は変更になる場合がありますので注意)Gemfileを拡張:
source 'http://rubygems.org'
gem 'rails', '3.0.3'
case ENV["RAILS_DB"]
when "PostgreSQL"
gem 'pg', '0.10.0'
when "MySQL"
gem 'mysql2'
else
gem 'sqlite3', '1.3.3'
gem 'sqlite3-ruby', '1.3.3', :require => 'sqlite3'
end
...
に条件を追加します。 ActiveRecordの構造がデータベースのすべてのフレーバーにわたって互換性がないいくつかのスポットです。このような場合は、コードをActiveRecord::Base.connection.adapter_name
に設定することができます。ここに私の移行ファイルの1から例です:あなたは今RAILS_DB環境変数を設定することで、データベースを簡単に選択することができます
file: migrate/20110129023453_create_cached_web_pages.rb
def self.up
create_table :cached_web_pages do |t|
t.string :key
if ActiveRecord::Base.connection.adapter_name == "PostgreSQL"
t.binary :value
else
t.binary :value, :limit => 16777215
end
end
end
...
bundle install
を実行する必要があります。幸いにも、それはまさにテストコードがすることです。ですから、例えば、私は2つのウィンドウにRSpecのの自動テストを実行することができます。$ RAILS_DB=SQLite autotest
と
$ RAILS_DB=PostgreSQL autotest
今、私は私のファイルや自動テストで離れてハックすることができ、私のように何かを破損してしまった場合、静かに私を警告します私は一緒に行く。
質問がありますか? –
それは答えでの質問です(これはfaqによると正当です)。私は他の人が役に立つと思っていたと思った。 –
いいえ、質問部分に質問+回答です。下記のあなた自身の質問に答えてください(あなたの答え)、その答えを受け入れてください。そうすれば、これは未応答のキューから移動します。ありがとう! – awendt