sql >> Databáze >  >> RDS >> Mysql

RoR:jak otestuji svou aplikaci proti více databázím?

@awendt laskavě poukázal na to, že mohu odpovědět na svou vlastní otázku.

Ukázalo se, že recept je poměrně jednoduchý. Tajemství spočívá v použití proměnné prostředí, která Rails řekne, kterou db chcete použít.

1. Úprava souborů

V config/database.yml , zahrnout ERB konstrukty, jako je tento:

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 %>

Poznámka 1:Ukázal jsem to pouze pro testovací prostředí. Ve skutečnosti je to jediná, kterou jsem upravil, protože (údajně) poskytuje dostatečné pokrytí, aby mi řeklo, zda jsou všechny tři databáze správně podporovány.

Poznámka 2:K nastavení uživatelského jména a hesla nepotřebujete používat proměnné prostředí – to je právě něco, co preferuji, protože se vyhne odhalení hesel v běžně prohlíženém souboru.

Podobně rozšiřte Gemfile následovně (všimněte si, že čísla verzí se mohou lišit):

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. Přidejte do kódu podmínky

Navzdory maximálnímu úsilí vývojového týmu Rails existuje několik míst, kde konstrukce ActiveRecord nejsou kompatibilní se všemi verzemi databáze. V těchto případech můžete svůj kód podmínit ActiveRecord::Base.connection.adapter_name . Zde je příklad z jednoho z mých migračních souborů:

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. Spuštění a testování

Nyní můžete vybrat databázi jednoduše nastavením proměnné prostředí RAILS_DB, ale má to háček:musíte spustit bundle install pokaždé nastavit příslušný databázový adaptér z Gemfile. Naštěstí přesně to dělá testovací kód. Mohu tedy například spustit autotest rspec ve dvou oknech:

$ RAILS_DB=SQLite autotest

a

$ RAILS_DB=PostgreSQL autotest

Nyní se mohu nabourat do svých souborů a autotest mě tiše upozorní, pokud jsem něco rozbil.




  1. Získejte aktualizovaný řádek

  2. Příklady CURRENT_DATE – MySQL

  3. Jak v PHP zobrazit obsah pole v tabulce

  4. Vytvoření aplikace Django Movie Recommendation pomocí Jaccard Index