Kayıt defteri tablosu nasıl yeniden oluşturulur?


9

registryDiğer sorunlar nedeniyle tabloyu kesmiştim , ama şimdi registryveritabanında listelenen dosyalara göre tabloyu yeniden oluşturmada sorun yaşıyorum .

Sizi aramamın registry_update(), _registry_update()ya registry_rebuild()bunu yapmak için:

drush eval "registry_rebuild();"

Ama sonra görünen şu hatayı aldım:

Önemli hata: 'SelectQueryExtender' sınıfı, 15. satırdaki include / pager.inc içinde bulunamadı

Varsayılan olarak ( systemmodül kurulumunda) registrytablosu boştur, Peki Drupal bu tabloyu uygun varsayılan verilerle nasıl doldurur?

Yanıtlar:


15

Bunu yapmanın en kolay yolu, herhangi bir modülü etkinleştirmektir, çünkü bu sizin için yapacaktır. Tabii ki, kayıt defterini yeniden oluşturmanız gerekirse, genel olarak kullanıcı arayüzü konuşma uygun olmayabilir, ancak drush en [modulename]ihtiyacınız olan her şey olabilir.

Bu yeterli değilse, Kayıt Defteri'ni yeniden oluşturma, kayıt defterini yeniden oluşturmayı çok kolay hale getirir. Bunu yapmanın en kolay yolu, onu bir uzantı uzantısı olarak kurmaktır.

Uzantıyı yükleyin ve çalıştırın drush rr.

Modül sayfasında ayrıntılı kurulum talimatları vardır ve ayrıca gerektiğinde nasıl çalıştırılacağını gösterir.


9

Bu, Drupal'ı yeniden yükleyerek veya ideal bir Drupal kurulumundan tabloyu kırık örneğinize kopyalayarak düzeltilebilir.

Veya aşağıdaki geçici çözümü deneyebilirsiniz (yalnızca Drupal örneğiniz zaten bozukken yapın):

  1. Önce eski kayıt defteri tablosunu yedekleyin (her ihtimale karşı):

    drush sqlq "CREATE TABLE registry_bak LIKE registry; INSERT INTO registry_bak SELECT * FROM registry;"
    drush sqlq "CREATE TABLE system_bak LIKE system; INSERT INTO system_bak SELECT * FROM system;"
  2. Bootstrap önbelleğini ve kayıt defteri tablosunu temizleyin.

    drush sqlq "TRUNCATE cache_bootstrap; TRUNCATE registry"
  3. Temel verileri kayıt defteri tablosuna ekleyin:

    drush sqlq 'INSERT INTO registry (name, type, filename) VALUES ("SelectQueryExtender", "class", "includes/database/select.inc"), ("DrupalDefaultEntityController", "class", "includes/entity.inc");'
    drush eval "registry_update();"
  4. Önbellekleri temizleyin:

    drush -y cc all
  5. 4. önbellek temizliği başarısız olursa, diğer bazı eksik sınıflar nedeniyle, aşağıdakilerden birini yapabilirsiniz:

    a) Eksik sınıfları manuel olarak ekleyin, örneğin:

    $ drush -y cc all
    Fatal error: Class 'Entity' not found in profile2.module on line 593
    $ grep -Rwl "^class Entity" .
    ./sites/all/modules/entity/includes/entity.inc
    $ drush sqlq 'INSERT INTO registry (name, type, filename) VALUES ("Entity", "class", "sites/all/modules/entity/includes/entity.inc");'
    $ drush -y cc all # testing...
    # If Fatal error:, repeat 5a. again.

    veya:

    b) Başarısız olan bu katkıda bulunan modülleri (örneğin profil2, kurallar) şu şekilde devre dışı bırakmaya çalışın:

    drush sqlq 'UPDATE system SET status = 0 WHERE name = "failing_module"'

    4'ten başlayarak adımları tekrarlayın.

  6. Bir şey olduğundan daha kırılmışsa, tablolarınızı orijinal adımına (1. adımda yapıldı) geri yükleyebilirsiniz:

    drush sqlq "TRUNCATE registry; INSERT INTO registry SELECT * FROM registry_bak;"
    drush sqlq "TRUNCATE system; INSERT INTO system SELECT * FROM system_bak;"

    ve yeniden dene.

Ayrıca bkz: Kurulu modüller / sites / all / modülleri / * 'den / sites / all / katkıda / modülleri / *' ya nasıl taşınır


Yeniden oluşturma registrytablosu, Drupal webroot'ta çalıştırılan aşağıdaki komut dosyasıyla da elde edilebilir:

grep -ERo "^(\s+)?(abstract )?class (\S+)" . | tr ':' ' ' | sed "s/abstract //g" | awk '{print "INSERT INTO registry (filename, type, name) VALUES (\x27"$1"\x27,\x27"$2"\x27,\x27"$3"\x27);"}' | $(drush sql-connect) -f

Sayesinde Mike regex ile bireyin yardım.


4
thx - 3. adım drush rrbaşarısız olduğu yerde beni kurtardı
ErichBSchulz
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.