Seperti namanya, “appups” dan “relups” adalah versi “upgrade” dari aplikasi dan rilis. Appup menjelaskan cara mengambil satu aplikasi dan memutakhirkan modulnya, khususnya, ia akan memiliki instruksi untuk memutakhirkan modul yang memerlukan “ekstra”. atau, jika kita meningkatkan supervisor, misalnya, Appup akan memiliki instruksi yang benar untuk menambah dan menghapus proses anak.
Sebelum kita memeriksa beberapa contoh file-file ini, mari kita lihat dulu spesifikasi tipe masing-masing file.
Berikut adalah struktur sintaks untuk appup
file sumber daya:
{Vsn, ({UpFromVsn, Instructions}, ...), ({DownToVsn, Instructions}, ...)}.
Elemen pertama dari triple adalah versi yang akan kita tingkatkan atau turunkan versinya. Elemen kedua adalah daftar kata kunci instruksi pemutakhiran yang dikunci berdasarkan versi aplikasi yang akan datang dari. Demikian pula, elemen ketiga adalah daftar kata kunci instruksi penurunan versi yang dikunci berdasarkan versi aplikasi yang akan diturunkan versinya ke. Untuk informasi lebih lanjut tentang tipenya sendiri, lihat Dokumentasi SASL.
Sekarang kita telah melihat sintaksnya, mari kita lihat contoh file sumber daya appup untuk aplikasi octochat yang dihasilkan menggunakan
tempat penyulingan:
± cat rel/octochat/lib/octochat-0.2.1/ebin/octochat.appup {"0.2.1", ({"0.2.0",({load_module,'Elixir.Octochat.Echo',()})}), ({"0.2.0",({load_module,'Elixir.Octochat.Echo',()})})}.
Membandingkan ini dengan struktur sintaksis di atas, kita melihat bahwa kita mempunyai a Vsn
elemen dari "0.2.1"
kita punya {UpFromVsn, Instructions}
pasangan:
({"0.2.0",({load_module,'Elixir.Octochat.Echo',()})})
dan kami punya satu
{DownToVsn, Instructions}
pasangan:
({"0.2.0",({load_module,'Elixir.Octochat.Echo',()})})
.
Instruksinya sendiri memberi tahu kita apa sebenarnya yang diperlukan untuk berpindah dari satu versi ke versi lainnya. Khususnya, dalam contoh ini, untuk melakukan upgrade, kita perlu “memuat” file tersebut Octochat.Echo
modul ke dalam VM. Demikian pula, instruksi untuk menurunkan versi juga sama. Untuk a diversi secara semantik
proyek, dapat dimengerti bahwa ini adalah perubahan kecil.
Perlu diperhatikan instruksi yang terdapat di .appup
file biasanya merupakan instruksi tingkat tinggi, jadi, load_module
mencakup pemuatan kode objek ke dalam memori dan penangguhan, penggantian, melanjutkan proses peningkatan aplikasi.
Selanjutnya, mari kita lihat struktur sintaksis a relup
file sumber daya:
{Vsn, ({UpFromVsn, Descr, Instructions}, ...), ({DownToVsn, Descr, Instructions}, ...)}.
Ini seharusnya terlihat familier. Ini pada dasarnya sama persis dengan
.appup
mengajukan. Namun, ada istilah tambahan, Descr
. Itu Descr
bidang dapat digunakan sebagai bagian dari identifikasi versi, tetapi bersifat opsional. Jika tidak, sintaks file ini sama dengan
.appup
.
Sekarang, mari kita lihat sebuah contoh relup
file untuk rilis octochat yang sama:
± cat rel/octochat/releases/0.2.1/relup {"0.2.1", ({"0.2.0",(), ({load_object_code,{octochat,"0.2.1",('Elixir.Octochat.Echo')}}, point_of_no_return, {load,{'Elixir.Octochat.Echo',brutal_purge,brutal_purge}})}), ({"0.2.0",(), ({load_object_code,{octochat,"0.2.0",('Elixir.Octochat.Echo')}}, point_of_no_return, {load,{'Elixir.Octochat.Echo',brutal_purge,brutal_purge}})})}.
File ini sedikit lebih padat, tetapi masih mengikuti tiga sintaks dasar yang baru saja kita periksa. Mari kita lihat lebih dekat petunjuk peningkatan:
({load_object_code,{octochat,"0.2.1",('Elixir.Octochat.Echo')}}, point_of_no_return, {load,{'Elixir.Octochat.Echo',brutal_purge,brutal_purge}})
Instruksi pertama,
{load_object_code,{octochat,"0.2.1",('Elixir.Octochat.Echo')}}
memberitahu
pengendali rilis untuk memuat ke dalam memori versi baru modul “Octochat.Echo”, khususnya yang terkait dengan versi “0.2.1”. Namun instruksi ini tidak akan menginstruksikan pengendali rilis untuk memulai (kembali) atau mengganti modul yang ada. Berikutnya, point_of_no_return
memberi tahu pengendali rilis bahwa kegagalan di luar titik ini berakibat fatal, jika pemutakhiran gagal setelah titik ini, sistem akan dimulai ulang dari versi rilis lama (dokumentasi aplikasi). Instruksi terakhir,
{load,{'Elixir.Octochat.Echo',brutal_purge,brutal_purge}}
memberitahu pengendali rilis untuk mengganti versi modul yang sedang berjalan dan menggunakan versi yang baru dimuat.
Untuk informasi lebih lanjut mengenai burtal_purge
lihat nilai “PrePurge” dan “PostPurge” di dokumentasi aplikasi.
Mirip dengan .appup
file, elemen ketiga dalam triple menjelaskan kepada pengendali rilis cara menurunkan versi rilis juga. Nomor versi dalam hal ini juga membuatnya sedikit lebih jelas, namun langkah-langkahnya pada dasarnya sama.