Làm thế nào để xây dựng lại bảng đăng ký?


9

Tôi đã cắt ngắn registrybảng, vì các vấn đề khác, nhưng bây giờ tôi gặp sự cố khi xây dựng lại registrybảng dựa trên các tệp được liệt kê trong cơ sở dữ liệu.

Tôi gọi registry_update(), _registry_update()hoặc registry_rebuild()để làm điều đó:

drush eval "registry_rebuild();"

Nhưng sau đó tôi đã xuất hiện lỗi sau:

Lỗi nghiêm trọng: Không tìm thấy lớp 'SelectQueryExtender' trong tệp bao gồm / pager.inc trên dòng 15

Theo mặc định (trên systemcài đặt mô-đun) registrylà trống, vậy làm thế nào Drupal lấp đầy bảng đó với dữ liệu mặc định phù hợp?

Câu trả lời:


15

Cách hoàn toàn dễ dàng nhất để làm điều đó, là kích hoạt bất kỳ mô-đun nào, vì điều đó sẽ làm điều đó cho bạn. Tất nhiên, nếu bạn cần xây dựng lại sổ đăng ký, nói chung giao diện người dùng có thể không khả dụng, nhưng drush en [modulename]có thể là tất cả những gì bạn cần.

Nếu điều đó là không đủ, thì việc xây dựng lại Registry sẽ giúp việc xây dựng lại registry trở nên dễ dàng. Cách dễ nhất để làm điều đó là cài đặt nó như một phần mở rộng.

Cài đặt tiện ích mở rộng và chạy drush rr.

Trang mô-đun có các hướng dẫn cài đặt chi tiết và cũng cho thấy cách chạy nó mà không cần drush nếu cần thiết.


9

Điều này có thể được khắc phục bằng cách cài đặt lại Drupal hoặc bằng cách sao chép bảng từ bản cài đặt Drupal mới lý tưởng vào trường hợp bị hỏng của bạn.

Hoặc bạn có thể thử cách giải quyết sau đây (chỉ thực hiện khi phiên bản Drupal của bạn đã bị hỏng):

  1. Sao lưu bảng đăng ký cũ trước (chỉ trong trường hợp):

    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. Xóa bộ đệm bootstrap và bảng đăng ký.

    drush sqlq "TRUNCATE cache_bootstrap; TRUNCATE registry"
  3. Chèn dữ liệu cơ bản vào bảng đăng ký:

    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. Xóa bộ nhớ cache:

    drush -y cc all
  5. Nếu xóa bộ nhớ cache trong 4. không thành công, vì một số lớp bị thiếu khác, bạn có thể:

    a) Thêm các lớp bị thiếu bằng tay, ví dụ:

    $ 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.

    hoặc là:

    b) Cố gắng vô hiệu hóa các mô-đun đóng góp thất bại này (ví dụ: profile2, quy tắc) bằng cách:

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

    và lặp lại các bước bắt đầu từ 4.

  6. Nếu một cái gì đó bị hỏng nhiều hơn nó, bạn có thể khôi phục các bảng của bạn về điểm ban đầu (được thực hiện trong 1. bước) bằng cách:

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

    và thử lại.

Xem thêm: Cách di chuyển các mô-đun đã cài đặt từ / site / all / module / * sang / site / all / contrib / module / *


registryBảng xây dựng lại cũng có thể đạt được bằng tập lệnh sau được chạy trong webroot Drupal:

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

Nhờ sự giúp đỡ của Mike với regex.


4
thx - bước 3 đã cứu tôi khi drush rrthất bại
ErichBSchulz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.