Automatic Data Seeding and Migration in Python
Data seeding
Data seeding diperlukan apabila kita tidak ingin ada data yang hilang. Misalnya pada adhub, setiap kami melakukan deployment database selalu di-reset, hal ini dapat menghilangkan data user dan data iklan yang sudah tersimpan di database. Masalah ini dapat dihindari dengan melakukan data seeding. Saat ini, kami belum mengimplementasikan code tersebut di staging namun berikut adalah implementasi Saya untuk automated data seeding di Adhub:
Implemenetasi Automated Data Seeding
Asumsi adalah kita telah melakukan data-dumping dari database yang ingin disimpan dengan menjalankan command
Sehingga seluruh data user akan disimpan dalam bentuk json user_profile.json
Untuk contoh saat ini, user_profile berisi 4 data user.
Kemudian, web adhub dilakukan reset untuk menghilangkan seluruh database dan memulai dari awal dengan melakukan command
Kita kemudian dapat melakukan data seeding dengan menjalankan command
Terlihat bahwa 4 objek yang sebelumnya tersimpan di user_profile berhasil ditambahkan ke database setelah website di-reset.
Untuk automatisasinya, kita dapat dengan mudah menambahkan perintah python manage.py loaddata [namafile yang ingin di seeding] ke dalam docker-compose.yml ataupun gitlab-ci.yml, berikut adalah contoh nya pada branch 31 di gitlab.
Pada gitlab-ci.yml:
Pada docker-compose.yml
Terlihat dari kedua gambar di atas, kami menggunakan data user yang sebelumnya sudah di-dump untuk kemudian di-seed ke dalam database web kami yang baru up dengan menggunakna command
“python manage.py loaddata user_profile.json”.
Django Migration
Pada DjangoFramework , Django menyediakan cara untuk melakukan migrasi , yaitu dengan menggunakan commands yang disediakan oleh django, terdapat beberapa perintah yang bisa digunakan untuk berinteraksi dengan migration pada django framework yaitu:
- python manage.py makemigrations . Berfungsi untuk membuat migrasi baru berdasarkan perubahan yang telah dibuat di models.
- python manage.py migrate . Berfungsi untuk mengaplikasikan migrasi.
- sqlmigrate . Berfungsi untuk menampilkan SQL statement untuk migrasi.
- showmigrations . Berfungsi untuk menunjukan list migrasi yang ada di project beserta dengan statusnya.
Untuk analogi nya bisa digambarkan makemigrations dan migrate seperti git add dan git commit pada Git Commands. Jika tidak ada perubahan pada makemigrations, maka kita tidak dapat melakukan migrate.
Oleh karena itu, kita dapat melakukan otomisasi django migrations dengan memasukkan command nya ke gitlab-ci, docker-composedan-yml, dan pada editor di portainer
Implementasi di Adhub
Pada gitlab-ci
source:
https://gitlab.cs.ui.ac.id/ppl-fasilkom-ui/2019/PPLA2/blob/staging/.gitlab-ci.yml
Pada Portainer editor
source:
https://portainer.docker.ppl.cs.ui.ac.id/#/stacks/staging?id=173&type=2&external=false
Pada docker-compose:
source:
https://gitlab.cs.ui.ac.id/ppl-fasilkom-ui/2019/PPLA2/blob/staging/docker-compose.yml
Dari ketiga gambar di atas terlihat bahwa kami telah melakukan otomisasi makemigrations dan migrate dengan menuliskan perintah yang bersangkutan di file-file yang perlu dijalankan.