Başarılı Drupal Site Güncellemeleri için Güncelleme ve Güncelleme Sonrası Kancalarını Anlama
Yayınlanan: 2023-04-25Temel güncellemeler veya modül güncellemeleri sırasında, Drupal web sitenizin kararlılığını ve bütünlüğünü sağlamak çok önemlidir. Neyse ki, Güncelleme API modülü ve Güncelleme/Güncelleme Sonrası Kancaları yardım etmek için buradalar.
Update API modülü, Drupal sitenizdeki kod ve modülleri güncellemek için gerekli kancaları sağlar. Bu kancalar, geliştiricilerin güncellemeleri ihtiyaçlarına göre özelleştirmelerine olanak tanıyan Güncelleme ve Güncelleme Sonrası Kancalardan başka bir şey değildir.
Bu yazıda Update API'yi, güncelleme ve güncelleme sonrası kancaların ne olduğunu ve ne zaman ve nasıl kullanılması gerektiğini tartışacağız. Her iki kanca türünü de anlayarak Drupal sitenizi en az çabayla başarılı bir şekilde güncelleyebilirsiniz. Başlayalım!
Güncelleme API'sı
Mevcut bir sitede çalışırken, bir modüldeki kodu güncellediğinizde, saklanan verilerin yeni kodla uyumlu olması için saklanan verileri güncellemeniz gerekebilir. Önünüzde 'Web sitesi beklenmeyen bir hatayla karşılaştı' gibi hataların yanıp söndüğünü fark etmiş olabilirsiniz. Korkunç değil mi? Biliyorum! Drupal'ın Güncelleme API'sinin imdadımıza yetiştiği yer burasıdır.
Güncelleme, Drupal çekirdeğinin aynı ana sürümü içindeki modülünüzün iki alt sürümü arasındaysa, verileri güncellemek için Güncelleme API'sini kullanabilirsiniz. Update API, modülünüz veri modelinde değişiklik yaptığında depolanan verilerde güncelleme gerçekleştiren kod sağlamanıza olanak tanır. Veri modeli değişikliği, mevcut bir sitede depolanan verileri o sitenin güncellenmiş kod tabanıyla uyumsuz hale getiren herhangi bir değişikliği ifade eder. Bu Veri modeli değişiklikleri şunları içerir:
Yapılandırma Şemasını Güncelleme
- Yapılandırma anahtarı ekleme/kaldırma/yeniden adlandırma.
- Yapılandırma anahtarının veri türünü değiştirme.
- Bir yapılandırma anahtarının vb. beklenen varsayılan değerini değiştirmek.
Veritabanı Şemasını Güncelleme
- Veritabanı tablosu veya alanı ekleme/değiştirme/kaldırma.
- Depolanan verileri farklı bir alana veya tabloya taşıma.
- Depolanan verilerin biçimini değiştirme vb.
Varlıkları ve Alanları Güncelleme
- Mevcut bir varlık tipine yeni bir temel alan ekleme.
- Bir alanı eski bir türden yeni bir türe güncelleme vb.
Verileri Güncelleme
- Mevcut bir sitede depolanan verileri işleyin.
Güncelleme kancalarıyla çalışma
Hook hook_update_N(), bir modülün küçük sürümleri arasında bir güncelleme başlatmak için kullanılır. Bu kancalar modülünüzün içine *.install dosyasına yerleştirilir.
hook_update_N(), (modül adı)_update_(sayı) biçiminde yazılır. Burada N şunlardan oluşur:
- 1 veya 2 basamak, Drupal çekirdek uyumluluğunu ifade eder (Drupal 8, 9, 10, vb.)
- Sonraki 1 basamak, modülünüzün ana yayın sürümü içindir
- 01 ile başlayan sıralı sayma için son 2 hane
Örnek:
example_update_9201(): 9.x-2.x sürümleri için ilk güncelleme.
"Örnek" modülün adı olduğunda, ilk hane Drupal çekirdek sürümü "9"u, "2" sayısı modülün ana sürüm sürümünü ve son iki basamak "01" için yazılan ilk güncelleme işlevini belirtir. modül 'örnek'.
Kanca uygulama fonksiyonunun sayısal kısmı (yani, yukarıdaki örnekte 9201), hangi güncellemelerin yürütüldüğünü takip etmek için veri tabanında saklanır. Bu nedenle, güncelleme işlevlerini asla yeniden numaralandırmamalısınız.
Bir modülün 'veritabanında saklanan örnek' mevcut şema sürümünü bilmek için şunu kullanın:
drush php-eval "echo drupal_get_installed_schema_version('example');"
Bir 'örnek' modülünün geçerli şema sürümünü manuel olarak '9201'e ayarlamak için şunu kullanın:
drush php-eval "echo drupal_set_installed_schema_version('example', '9201');"
Not: Veritabanınızı doğrudan güncellediği için lütfen üretim sitelerinde drupal_set_installed_schema_version() işlevini kullanmaktan kaçının. Geliştirme sırasında şema sürümünü sıfırlamak için yerel veya daha düşük test ortamlarınızda kullanabilirsiniz.
Çalıştırırken kullanıcılar için yazdırılacağından, güncelleme kancası işlevinden önce belge bloğu yorumuna uygun bir açıklama ekleyin.
Structure of hook_update_N(): /** * A aimple hook_update_N() hook. */ function example_update_9201() { // Code goes here. }
Bu kancalar sıralı düzende yürütülür, yani example_update_9201() kancası example_update_9202()'den önce yürütülür, sonraki 9203, 9204 vb.
Ayrıca, kancalar arasına bağımlılıklar ekleyerek bu kancaların sıralama düzenini değiştirebilirsiniz. İki güncelleme kancası arasında güncellemeleri çalıştırmak için hook_update_dependencies() kancasını kullanın.
Tüm güncelleme kancaları toplu olarak yürütülür ve ayrıca öğelerin toplu işlenmesini de destekler. Tüm güncelleme kancalarının, herhangi bir PHP'nin zaman aşımına uğramasına neden olmadan büyük verileri bir kerede işlemek için güncelleme kancalarında toplu işlemler oluşturmak için kullanılabilecek bir $sandbox parametresine erişimi vardır.
Yeni bir yapılandırma anahtarı eklemek için basit bir güncelleme kancası örneği:
Şu anda example_module.settings.yml dosyası şunları içerir:
Yapılandırmaya yeni bir anahtar 'tanımı' eklemek için:
- Ayarlar dosyasına 'açıklama' anahtarını ekleyin
- example_module.install dosyasına update_hook'u ekleyin:
- Kancayı çalıştırmak için drush updb kullanın.
- Güncellenen yapılandırmayı kontrol edin, yeni 'açıklama' anahtarı güncellendi.
Güncelleme Sonrası kancalarıyla çalışma
Güncelleme kancasına benzeyen hook_post_update_NAME() kancası, bir güncellemeyi tanıtmak için kullanılır. Ancak bu kanca, çoğunlukla varlıklar gibi verileri güncellemeyi amaçlamaktadır. Bu kancalar, tüm hook_update_N() kancaları çalıştırıldıktan sonra yürütülür. Bu aşamada, Drupal zaten tamamen onarılmıştır, böylece site içindeki herhangi bir API'yi kullanabilirsiniz.
Bu kancalar, modülünüzdeki bir *.post_update.php dosyasına yerleştirilir.
hook_post_update_NAME(), (modül adı)_post_update_(herhangi bir ad) biçiminde yazılır. Burada İSİM herhangi bir makine adı olabilir. Dosyadaki işlevlerin bu alfanümerik adlandırması, bu kancanın yürütme sırasını sağlayan tek şeydir.
Güncelleme kancalarına benzer şekilde, post_update kancasından önce docblock yorumuna uygun bir açıklama ekleyin. Ayrıca, aynı kanca adını tekrar kullanmayın.
hook_post_update_NAME() yapısı:
/** * A aimple hook_post_update_NAME() hook. */ function example_post_update_test() { // Code goes here. }
Güncelleme kancalarında olduğu gibi, post_update kancalarınız için Batch API'nin kullanılması gerektiğini belirtmek için $sandbox parametresini kullanın.
Veri terimini güncellemek için güncelleme sonrası kanca kullanımına ilişkin basit bir örnek:
- Şu anda, Etiketler sözlüğü altındaki tüm terimler devre dışı bırakılmış bir 'Test örneği' alanına sahiptir.
- Mevcut tüm terimler için 'Test örneği' alanını etkinleştirmek için example_module.post_update.php dosyasına bir post_update kancası ekleyin.
- Kancayı çalıştırmak için drush updb kullanın.
- Güncellenen terim verilerini doğrulayın, 'Test örneği' onay kutusu etkinleştirilmelidir.
Bu kancalar nasıl çalıştırılır!
Bu kancaları yürütmek için Drush komutunu kullanabilirsiniz, drush updb. Toplu işi aşağıdaki adımlarda oluşturur:
- Tüm güncelleme kancaları keşfedildi.
- Bağımlılığı çözer ve sıralarını sıralar.
- Toplu işleme için kancalar yerleştirilir.
- Ardından, tüm Posta kancaları keşfedilir.
- Post_update kancaları varsa ve update_hook daha önce çalıştıysa önbellekler temizlenir.
- Ardından, her post_update kancasını partiye itin.
- Toplu işlemi yürütün.
Güncelleme sonrası kancanın güncelleme kancasına göre önemli bir avantajı, Drupal'ın güncelleme sonrası çalıştırıldığında tamamen işlevsel olmasıdır. Bu, geliştiricilerin güncelleme sonrası kancayı kullanırken herhangi bir Drupal hizmetini kullanmasına olanak tanır. Güncelleme kancası ile Drupal'ın tamamen onarıldığı varsayılmamalı ve diğer kancalar, varlık API'leri vb. çağrılmaktan kaçınılmalıdır.
Son düşünceler
Yapılandırma/veritabanı şemasını güncelleyerek sitenizi düzeltmeye çalışırken güncelleme kancalarını kullanmayı deneyin. Saklanan verileri manipüle etme, yapılandırmaları yeniden kaydetme, içerik varlıklarını güncelleme, önbelleği temizleme vb. söz konusu olduğunda, güncelleme sonrası kancaların kullanılması daha uygundur.
Dürüst olmak gerekirse, Drupal.org'da hangi kancanın ne zaman kullanılacağına dair net bir belge yok! İsterseniz katkıda bulunabileceğiniz, bu iki kancanın kullanımına ilişkin belgelerin geliştirilmesini isteyen açık bir sorun var.
Ancak, geliştiricilerin deneyimine dayanarak ve örnek olarak Drupal 9 ve 10 çekirdek modüllerine bakarak, yapılandırmalarda veya veritabanlarında CRUD işlemleri gerçekleştirmek (yani siteyi onarmak) için güncelleme kancalarını kullanın ve CRUD içerik varlıkları için güncelleme sonrası kancaları kullanın ( güncelleme sonrası kancalar güncelleme kancalarından sonra çalıştırıldığından, güncellenen sitedeki verileri düzeltin).
Bu makaleyi okumaktan zevk aldınız mı? Bize biraz sevgi gösterin ve haftalık bültenimize bugün abone olun!