Mysql
 sql >> база данни >  >> RDS >> Mysql

RoR:как да тествам приложението си срещу множество бази данни?

@awendt любезно посочи, че мога да отговоря сам на въпроса си.

Оказва се, че рецептата е доста проста. Тайната е да използвате променлива на средата, за да кажете на Rails кой db искате да използвате.

1. Промяна на вашите файлове

В config/database.yml , включва ERB конструкции като тази:

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. Добавете условия към вашия код

Въпреки най-добрите усилия на екипа за разработка на Rails, има няколко места, където конструкциите на 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. InnoDB или MyISAM - Защо не и двете?

  3. Недостатък на производителността на композитния първичен ключ в MySQL

  4. ASCII() Примери – MySQL

  5. mysql:премахване на редове с повтарящи се стойности с условие (повтарящи се колони)