Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

RoR:मैं एकाधिक डेटाबेस के विरुद्ध अपने ऐप का परीक्षण कैसे करूं?

@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

अब मैं अपनी फाइलों को हैक कर सकता हूं और अगर मैं आगे बढ़ता हूं तो ऑटोटेस्ट चुपचाप मुझे सतर्क कर देगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सर्वर शुरू करने पर mysql कॉन्फ़िगरेशन रुक जाता है

  2. MySQL स्पेस की निगरानी कैसे करें?

  3. यूआरएल में सही डेटाबेस ऑब्जेक्ट आईडी छुपा रहा है

  4. FindAll () Sequelize से नहीं मिलता है

  5. पहली तालिका से सभी स्तंभों का चयन करने का बेहतर तरीका और आंतरिक तालिका में दूसरी तालिका से केवल एक स्तंभ का चयन करें