2 tahun berlalu setelah terakhir posting di blog ini. 2 tahun berlalu jg jari mengetik dan mata melihat baris baris kode Ruby serta framework Ruby on Rails. Sekarang ada tugas negara untuk kembali belajar Ruby on Rails ini. Aplikasi yang saya buat mengharuskan untuk membuat database lebih dari satu. Biasanya hal seperti ini digunakan saat kita akan memisahkan suatu keperluan. Sebagai contoh database transaksi kita pisahkan dengan database report dan juga kita pisahkan lagi dengan database log/audit trail.
Setelah mencoba beberapa teknik, berikut sedikit trik untuk membuat konfigurasi multiple database pada Ruby on Rails, dengan fungsi migration juga pada semua konfigurasi.
- Buat sebuah file konfig database “.yml” pada folder config, sebagai contoh, disini dibuat file dengan nama “database_a2m.yml” dengan konfigurasi sama dengan file database.yml default bawaan rails.
- Buat sebuah file dengan nama “db_a2m.rb” pada folder “config/initializers/”, dan ketikkan baris kode berikut :
DB_A2M = YAML::load(ERB.new(File.read(Rails.root.join("config","database_a2m.yml"))).result)[Rails.env] - Jika di configuration ruby default terdapat folder “db” di root folder, maka kita menambahkan sebuah folder untuk database baru, sebagai contoh saya menambahkan folder dengan nama “db_a2m”.

- Copy isi direktori db ke folder db_a2m, sehingga struktur direktori app kita sebagai berikut.

- Buat sebuah file dengan nama db_a2m.rake dan letakkan pada folder “lib/tasks/”. Dan ketikkan baris kode berikut pada file tersebut :
task spec: ["a2m:db:test:prepare"] namespace :a2m do namespace :db do |ns| task :drop do Rake::Task["db:drop"].invoke end task :create do Rake::Task["db:create"].invoke end task :setup do Rake::Task["db:setup"].invoke end task :migrate do Rake::Task["db:migrate"].invoke end task :rollback do Rake::Task["db:rollback"].invoke end task :seed do Rake::Task["db:seed"].invoke end task :version do Rake::Task["db:version"].invoke end namespace :schema do task :load do Rake::Task["db:schema:load"].invoke end task :dump do Rake::Task["db:schema:dump"].invoke end end namespace :test do task :prepare do Rake::Task["db:test:prepare"].invoke end end # append and prepend proper tasks to all the tasks defined here above ns.tasks.each do |task| task.enhance ["a2m:set_custom_config"] do Rake::Task["a2m:revert_to_original_config"].invoke end end end task :set_custom_config do # save current vars @original_config = { env_schema: ENV['SCHEMA'], config: Rails.application.config.dup } # set config variables for custom database ENV['SCHEMA'] = "db_a2m/schema.rb" Rails.application.config.paths['db'] = ["db_a2m"] Rails.application.config.paths['db/migrate'] = ["db_a2m/migrate"] Rails.application.config.paths['db/seeds'] = ["db_a2m/seeds.rb"] Rails.application.config.paths['config/database'] = ["config/database_a2m.yml"] end task :revert_to_original_config do # reset config variables to original values ENV['SCHEMA'] = @original_config[:env_schema] Rails.application.config = @original_config[:config] end end - Untuk menjalankan database migration gunakan perintah berikut : rails a2m:db:migrate
- Sesuaikan dengan nama konfigurasi.
- Restart server dan sekarang sudah bisa menggunakan konfigurasi multiple database dengan menambahkan baris kode :
"establish_connection DB_A2M" pada file model.

