Heroku
에 최신 RoR 응용 프로그램을 배포하기 시작했습니다. 이전에 SQLite와 MySQL을 사용하고 있었기 때문에 PostgreSQL을 사용해야했습니다. 저는 개발의 열기 속에서 어떤 것도 깨뜨리지 않았 음을 확인하기 위해 3 개의 데이터베이스 모두에 대해 계속적으로 레드/그린 테스트를 수행하는 아주 간단하고 쉬운 방법을 원했습니다.RoR : 여러 데이터베이스에 대해 내 앱을 테스트하려면 어떻게해야합니까?
어떻게해야할까요?
Heroku
에 최신 RoR 응용 프로그램을 배포하기 시작했습니다. 이전에 SQLite와 MySQL을 사용하고 있었기 때문에 PostgreSQL을 사용해야했습니다. 저는 개발의 열기 속에서 어떤 것도 깨뜨리지 않았 음을 확인하기 위해 3 개의 데이터베이스 모두에 대해 계속적으로 레드/그린 테스트를 수행하는 아주 간단하고 쉬운 방법을 원했습니다.RoR : 여러 데이터베이스에 대해 내 앱을 테스트하려면 어떻게해야합니까?
어떻게해야할까요?
@awendt은 내 자신의 질문에 대답 할 수 있다고 친절하게 지적했다.
레시피가 다소 단순합니다. 비밀은 환경 변수를 사용하여 DB에 사용할 데이터베이스를 알려주는 것입니다.
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
에 코드를 적용 할 수 있습니다. 여기에 내 마이그레이션 파일 중 하나의 예입니다 : 이제 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
을 실행해야합니다. 다행히도, 그것은 정확히 테스트 코드가하는 것입니다.$ RAILS_DB=SQLite autotest
및
$ RAILS_DB=PostgreSQL autotest
지금 내 파일에서 멀리 해킹 할 수와 내가 같이 아무것도 파손 한 경우 자동 측정 조용히 저를 알려줍니다 : 그래서, 예를 들어, 나는 두 개의 창에서 RSpec에의 자동 측정을 실행할 수 있습니다 나는 따라 간다.
질문이 있습니까? –
답변에 대한 질문입니다 (FAQ에 따르면 합법입니다). 나는 다른 사람들이 유용하다고 생각할지도 모른다고 생각했다. –
아니, 질문 부분에 질문 + 답변. 아래에 자신의 질문에 답변하십시오 ("귀하의 답변") 그리고 그 대답을 수락하십시오. 이렇게하면 응답되지 않은 대기열에서 이동합니다. 감사! – awendt