Khoerodin Developer, writer, and maker |

Developer, writer, and maker

Jangan Gunakan Rails Schema! Gunakan Ini Sebagai Gantinya

Ada dua hal yang perlu dicatat dari schema.rb

  • Ini adalah cerminan struktur database dalam bentuk Ruby
  • Bersifat database-agnostic yang artinya apapun database yang digunakan syntax dan strukturnya sebagian besar akan sama
  • Fitur-fitur database advance tidak ter-capture

schama.rb akan sangat berguna ketika kita dihadapkan oleh skenario:

  • Aplikasi kita memiliki ribuan file migrasi, ini menyebabkan banyak waktu terbuang karena memerlukan waktu lama ketika menyiapkan environment baru
  • File migrasi mungkin mengandung kode yang hanya compatible pada database versi lama sehingga akan fail jika dijalankan

Solusi tercepat dari kedua (atau lebih) problem di atas adalah dengan menjalankan rails db:setup. Perintah ini akan meng-generate database dari schema.rb.

Tapi bagaimana jika database memiliki logic yang kompleks yang tidak ter-capture di schama.rb? Solusinya yaitu menggunakan structure.sql

Kelebihan structure.sql

Kelebihan structure.sql ialah akan meng-copy struktur database dengan sama persis termasuk function, views, constraint, stored procedure dan lain-lain dimana hal ini tidak bisa didapatkan jika menggunakan schema.rb

Beralih dari schema.rb ke structure.sql

Buka file config/application.rb

module YourApp
  class Application < Rails::Application
    config.load_defaults x.x

    # Tambahkan baris ini:
    config.active_record.schema_format = :sql
  end
end

Kemudian jalankan rails db:migrate maka akan tergenerate file db/structure.sql. Ketika kita menjalankan perintah rails db:setup tidak lagi menggunakan schema.rb tapi menggunakan structure.sql