@awendt कृपया इंगित करें कि मैं अपने प्रश्न का उत्तर दे सकता हूं।
यह पता चला है कि नुस्खा बल्कि सरल है। रहस्य एक पर्यावरण चर का उपयोग करना है ताकि रेल को बताया जा सके कि आप किस डीबी का उपयोग करना चाहते हैं।
<एच2>1. अपनी फ़ाइलें संशोधित करना
config/database.yml
. में , इस तरह ईआरबी निर्माण शामिल करें:
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:मैंने इसे केवल परीक्षण वातावरण के लिए दिखाया है। वास्तव में, मैंने केवल यही संशोधित किया है, क्योंकि (माना जाता है) यह मुझे यह बताने के लिए पर्याप्त कवरेज प्रदान करता है कि क्या सभी तीन डेटाबेस ठीक से समर्थित हैं।
नोट 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
...
2. अपने कोड में शर्तें जोड़ें
रेल विकास टीम के सर्वोत्तम प्रयासों के बावजूद, कुछ ऐसे स्थान हैं जहां ActiveRecord निर्माण डेटाबेस के सभी स्वादों में संगत नहीं हैं। इन मामलों में, आप अपने कोड को ActiveRecord::Base.connection.adapter_name
पर कंडीशन कर सकते हैं . यहाँ मेरी माइग्रेशन फ़ाइलों में से एक का उदाहरण दिया गया है:
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
...
3. चल रहा है और परीक्षण कर रहा है
अब आप केवल RAILS_DB पर्यावरण चर सेट करके एक डेटाबेस का चयन कर सकते हैं, लेकिन एक पकड़ है:आपको bundle install
चलाना होगा हर बार Gemfile से उपयुक्त डेटाबेस एडॉप्टर सेट करने के लिए। सौभाग्य से, परीक्षण कोड ठीक यही करता है। इसलिए, उदाहरण के लिए, मैं दो विंडो में rspec का ऑटोटेस्ट चला सकता हूं:
$ RAILS_DB=SQLite autotest
और
$ RAILS_DB=PostgreSQL autotest
अब मैं अपनी फाइलों को हैक कर सकता हूं और अगर मैं आगे बढ़ता हूं तो ऑटोटेस्ट चुपचाप मुझे सतर्क कर देगा।