Güncellemeleri nasıl yeniden çalıştırırım (modül şeması versiyonunu değiştir)?


22

Bir modül üzerinde çalışıyorum ve şemadaki birkaç alan tipini değiştirdim. Test etmeden önce bir yedekleme almadım ve DB'yi karıştırdım (sadece bir dev site). Neyse, her şeyi yeniden yükledim ve şema sürümü en yüksek güncellemenin ayarına ayarlandı. Ancak, aslında güncelleştirmeyi çalıştırmam gerekiyor; (Modül kodunda güncellenmiş şema olsaydı, yüklemem olmazdı, bu yüzden bunun bu güncellemeyi test etmenin iyi bir yolu olacağını düşündüm.

Modülümün şema sürümünü belirli bir sürüme nasıl sıfırlarım? Drupal 7'de bunu yapardım:

drush sqlq "UPDATE system SET schema_version=8102 WHERE name='flllpdf' AND type='module'"

Yanıtlar:


47

Duruma erişmek doğrudan işe yarıyorken , yalnızca API'yı da kullanabilirsiniz: drupal_set_installed_schema_version () . Bağlantılı belgeler sayfasında görüldüğü gibi, aslında en azından 4.7'den beri değişmeyenler. Muhtemelen çok uzun zamandır var olan birkaç API fonksiyonundan biri;)

Sarhoş yapmak için:

drush ev "drupal_set_installed_schema_version('fillpdf', 8012)"

Not: Drupal 7'de ekstra eklemeniz gerekir include 'includes/install.inc';.


5
Ayrıca hızlıca kontrol etmeniz gerekirse de güzel: drush ev "echo drupal_get_installed_schema_version ('MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin

veya drush pm-info modulename
Beanluc 11:18

10

Drupal 8 şimdi keyvalueşema sürümüyle ilgili bilgileri depolamak için servisi kullanıyor . Bu, Devlet API'sinin kullandığı API ile aynıdır .

Değer bilgileri veritabanında depolandığında serileştirilir, bu nedenle doğrudan bir SQL sorgusu kullanmak en düşük düzeydedir. Bunun yerine, aşağıdakileri gerçekleştirmek için kullanın drush php-eval(veya Drush'unuz yoksa, Drupal'ı önyükleyen bir komut dosyası):

<?php
  \Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102);
?>

Değişim fillpdfve 8102sırasıyla senin modül adı ve istenen şema sürümü.

Bu komutun Drush şekli:

drush ev "\Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102)";


0

SET ve GET modülü, kod aracılığıyla günceller (Drush olmadan). Kod aşağıda

GET  = drupal_get_installed_schema_version('moduleName');

SET = drupal_set_installed_schema_version("moduleName", "8000");

0

Doğrudan veritabanında güncellemeye de gidebilir. Sequel Pro (mac) veya herhangi bir veritabanı UI aracı windows / linux gibi bir şey kullanıyorsanız, bu gerçekten kolay. Muhtemelen en iyi fikir değil ve bunu üretim düzeyinde bir veritabanına karşı yapmayı tavsiye etmeyeceğim, ancak işi halledecek!

Tablo = key_value

collection = system.schema
name = fillpdf (your_module)
value = güncelleme i: 8102;

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.