3İlk olarak database.yml dosyamızda yeni bağlantımızı tanımlayalım. Ben ana veritabani için mysql kullanıyorum bağlanmak istediğim yeni veritabanı ise sqlite3 olsun.

Bağlantı ismini parasut olarak belirliyorum. ( Şuanda parasut.com apisi üzerinde çalışıyorum.)

parasut:
  <<: *default
  database: db/parasut.sqlite3

User modelimizde bu veritabanına baglanmak için sadece establish_connection :parasut ifadesini kullanmam yeterli. Modelin tamamına bakacak olursak;

class User < ApplicationRecord
  establish_connection :parasut
end

Migrationlar

Yukarıdaki işlemlerle veritabanı bağlantısını sağladık ancak migrationlarımız için otomatik bir yol bulunmamakta. Yani migrationlarımız birincil bağlantımız üzerinden çalışacaktır.

Migrationlarımızı çalıştırmak için rake görevlerini kullanabiliriz.

Yine tutarlılık için parasut namespacinde migrate görevi oluşturalım.

rails g task parasut migrate

lib/task/parasut.rb adlı bir dosya oluşacaktır.

namespace :parasut do
  desc "TODO"
  task migrate: :environment do
  end
end

Bu görevimizi aşağıdaki şekilde değiştirsek migrationlarımız artık rails parasut:migrate komutu ile istediğimiz veritabanı için çalışacaktır.

namespace :parasut do
  desc "Local veritabanina migrationlari yapar"
  task migrate: :environment do
    ActiveRecord::Base.establish_connection :parasut
    ActiveRecord::Migrator.migrate("db/local")
  end
end

Burada ben yeni bir klasör oluşturarak migrationlarımızı bu klasör içerisine taşımayı tercih ettim. Normalde migration klasörü içerisinde alt klasörler kullanabiliyorduk diye hatırlasamda şuan itibari ile alt klasör içerisindeki migrationlarıda rails alğılamakta.

Seedler

Seedler konusunda biraz tembellik ettim ve aşağıdaki gibi bir görev ile işlemi tamamladım. Migrationlara benzer bir yöntemde oluşturulabilir.

  task seed: :environment do
    ActiveRecord::Base.establish_connection :parasut
    User.create!(email: 'admin@lab.com' , password: 'admin' , password_confirmation: 'admin')
  end