Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

RoR:bagaimana cara menguji aplikasi saya terhadap banyak basis data?

@awendt dengan ramah menunjukkan bahwa saya dapat menjawab pertanyaan saya sendiri.

Ternyata resepnya cukup sederhana. Rahasianya adalah menggunakan variabel lingkungan untuk memberi tahu Rails db mana yang ingin Anda gunakan.

1. Memodifikasi file Anda

Di config/database.yml , sertakan konstruksi ERB seperti ini:

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

Catatan 1:Saya hanya menunjukkannya untuk lingkungan pengujian. Faktanya, itulah satu-satunya yang telah saya modifikasi, karena (seharusnya) menyediakan cakupan yang cukup untuk memberi tahu saya apakah ketiga database didukung dengan benar.

Catatan 2:Anda tidak perlu menggunakan variabel lingkungan untuk menyetel nama pengguna dan sandi -- itu hanya sesuatu yang saya lebih suka lakukan karena menghindari membuka sandi dalam file yang biasa dilihat.

Demikian pula, perluas Gemfile sebagai berikut (perhatikan bahwa nomor versi Anda mungkin berbeda):

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. Tambahkan ketentuan ke kode Anda

Terlepas dari upaya terbaik dari tim pengembangan Rails, ada beberapa titik di mana konstruksi ActiveRecord tidak kompatibel di semua jenis database. Dalam kasus ini, Anda dapat mengkondisikan kode Anda di ActiveRecord::Base.connection.adapter_name . Berikut ini contoh dari salah satu file migrasi saya:

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. Menjalankan dan menguji

Anda sekarang dapat memilih database hanya dengan menyetel variabel lingkungan RAILS_DB, tetapi ada masalah:Anda harus menjalankan bundle install setiap kali mengatur adaptor database yang sesuai dari Gemfile. Untungnya, itulah tepatnya yang dilakukan oleh kode pengujian. Jadi, misalnya, saya dapat menjalankan autotest rspec di dua jendela:

$ RAILS_DB=SQLite autotest

dan

$ RAILS_DB=PostgreSQL autotest

Sekarang saya dapat meretas file saya dan autotest diam-diam akan memperingatkan saya jika saya telah merusak sesuatu saat saya melanjutkan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysqli menyiapkan pernyataan istirahat memasukkan gambar ke dalam database

  2. PyInstaller, file spesifikasi, ImportError:Tidak ada modul bernama 'bla'

  3. Membuat baris kosong untuk mengulang baris

  4. mySql - membuat gabungan menggunakan daftar nilai yang dipisahkan koma

  5. 'pip install MySQL-python' gagal dengan 'IndexError'