10. Tutorial 10: Database Migration and Automating Deployment
**URL Heroku:** https://pmpl-izzan.herokuapp.com/
...
...
@@ -754,3 +755,58 @@ Sebenarnya, hal ini sudah pernah dilakukan dalam pengerjaan **Tutorial 7**, atau
Penggunaan *method*`create_pre_authenticated_session` ini memiliki beberapa kelebihan dibandingkan dengan implementasi pada Tutorial 7. Diantaranya, setiap *test case* tidak perlu melewati tahapan-tahapan mengirimkan email yang berisikan UID, yang mana memakan waktu dan tidak perlu melakukan interaksi dengan modul luar, cukup hanya di dalam modul `tutorial_7`.
## Penjelasan Tutorial 10
Berdasarkan buku **Test-Driven Development with Python 2nd Edition, Appendix E,** menjelaskan tentang *data base migration* dan *automatic deployment*. Kedua aspek tersebut menjadi penting dalam proses pengembangan *software* dikarenakan tingginya resiko untuk melakukan pemindahan/migrasi data-data yang terdapat didalamnya, contohnya ketika sedang dalam *maintenance* dan pergantian infrastruktur baru.
*Database migration* yang dicontohkan dalam buku acuan adalah dengan melakukan **duplication check** pada data-data yang terdapat di dalam *database*, yang dijalankan pada saat melakukan *makemigrations*. Dalam pengerjaan tutorial 10 ini, saya melakukan pengecekan sederhana duplikasi isi dari kolom `todo_list` pada model `TodoList` milik modul `tutorial_7`, seperti yang ditunjukkan oleh potongan kode berikut.
Selanjutnya, untuk melakukan simulasi *data population*, saya membuat sebuah *script* untuk melakukan *generate* terhadap data-data dari model `TodoList` dan `Commentary`, dimana masing-masing model memiliki 50 buah data.
Kedua potongan kode tersebut saya simpan didalam sebuah file Python baru bernama `0003_check_duplicate_and_populate_data.py` di dalam folder `migrations` pada modul `tutorial_7` dalam project PMPL saya. File migrations yang saya buat memiliki *dependency* dengan file migrations `0002_user_last_login.py`, sehingga dalam menjalankan *makemigrations*, akan menunggu file tersebut selesai diekseskusi. Berikut adalah potongan kode dari file migration yang saya buat.
```python
fromdjango.dbimportmigrations,models
classMigration(migrations.Migration):
dependencies=[
('tutorial_7','0002_user_last_login')
]
operations=[
migrations.RunPython(find_dupes),
migrations.RunPython(populate_data)
]
```
Untuk melakukan pengambilan data dari *production environment*, saya menggunakan **Heroku** sebagai sarana *hosting* dari Tutorial PMPL ini. Saya menggunakan sebuah tools bernama **Heroku CLI** yang sudah terintegrasi dengan **PostgreSQL** untuk melakukan ekstraksi data dari DBMS.
```bash
$ heroku pg:backups:capture --app pmpl-izzan
$ heroku pg:backups:download --app pmpl-izzan
```
Secara umum, kedua perintah tersebut melakukan *capturing* terhadap kondisi *database* terkini, dan melakukan pengunduhan dalam bentuk file **SQL dump** dari hasil *capturing* tersebut.