Ketika aplikasi dalam tahap produksi dan diperlukan untuk melakukan perubahan pada tabel, saya kira melakukan automigrate tidak mungkin karena menghapus semua data dari tabel yang diubah. Melakukan autoupdate akan sesuai, tetapi saya khawatir tentang skalabilitas. Apakah aman untuk mengandalkan autoupdate pada produk dalam tahap produksi? Salah satu keuntungan dari migrasi mirip Rails adalah menyimpan catatan perubahan untuk memastikan bahwa setiap instance atau lingkungan database akan berada dalam skema yang sama persis. Apakah ada cara yang dikembangkan dengan baik untuk mencapai ini di LoopBack?

Bukan hanya karena ini tetapi jika diperlukan untuk menormalkan data selama perubahan kolom, bagaimana hal itu dilakukan di LoopBack? Saya tidak melihat dukungan untuk migrasi semacam ini.

1
Mateus Pires 9 Juli 2020, 02:03

1 menjawab

Jawaban Terbaik

Halo dari tim LoopBack

Melakukan pembaruan otomatis akan sesuai, tetapi saya khawatir tentang skalabilitas. Apakah aman untuk mengandalkan pembaruan otomatis pada produk dalam tahap produksi? Salah satu keuntungan dari migrasi mirip Rails adalah menyimpan catatan perubahan untuk memastikan bahwa setiap instance atau lingkungan database akan berada dalam skema yang sama persis. Apakah ada cara yang dikembangkan dengan baik untuk mencapai ini di LoopBack?

Anda benar bahwa menjalankan migrasi database auto-magic (seperti yang disediakan oleh autoupdate) pada data produksi langsung berisiko. Kami sedang mendiskusikan kerangka kerja yang lebih kuat dalam masalah GitHub loopback-next#487 , jangan ragu untuk bergabung dalam upaya! Salah satu anggota komunitas menyebutkan paket pihak ketiga loopback4-migration, Anda mungkin ingin untuk memeriksanya.

Bukan hanya karena ini tetapi jika diperlukan untuk menormalkan data selama perubahan kolom, bagaimana hal itu dilakukan di LoopBack? Saya tidak melihat dukungan untuk migrasi semacam ini.

Saya khawatir desain automigrate/autoupdate saat ini tidak mendukung transformasi data kustom sebagai bagian dari migrasi database. Opsi yang memungkinkan adalah menimpa app.migrateSchema untuk menjalankan perintah database tambahan sebelum atau setelah migrasi otomatis dijalankan.

class MyApplication extends RepositoryMixin(RestApplication) {
 async migrateSchema(options: SchemaMigrationOptions = {}): Promise<void> {
   // add code to normalize data before column definitions are changed
   await super.migrateSchema(options);
   // add code to normalize data after column definitions were changed
  }
}
1
Miroslav Bajtoš 24 Juli 2020, 14:26