Very hot <<== bấm vào

Gỡ bỏ module của Drupal đúng cách sẽ tránh được khóc ròng

Submitted by superthin on 03/03/2018 - 11:30:01
Biểu tượng Drupal module

Trên trang drupal.org chắc chắn rằng có những bài viết rất tốt về việc cài đặt một module như thế nào, gỡ bỏ nó ra sao, kèm theo đó là cộng đồng trao đổi rất nhiều về những vấn đề này. Bài này có vẻ là thừa thãi, là chuyện tầm bậy, vớ vẩn nhưng nó là một mẹo giúp bạn bớt điên đầu về sau nếu đọc qua nó.

Vì sao có bài viết về mô-đun Drupal này?

Trước khi làm được trang web bán hàng online sunnydepot chấm com (nay đã biến mất) để bán một số sản phẩm, Thin đã thử biến cái blog này thành một trang có chức năng giỏ hàng bằng cách cài thêm các module về e-commerce cho Drupal, được đề cập đến ở Thử nghiệm làm một trang web bán hàng trực tuyến.

Sau quá trình cài cắm "toát mồ hôi", giỏ hàng hoạt động nhưng trông chẳng bắt mắt tí nào. Việc bổ sung, sửa đổi, phát triển thêm các chức năng khác để trở thành một trang bán hàng online thực sự đòi hỏi phải một đội ngũ phát triển, một mình Thin xem như chịu thua, sức người có hạn.

Vậy là lại phải gỡ bỏ các module đã cài vào. Trong quá trình gỡ bỏ, do không ngồi viết lại các bước cũng như các lưu ý mà làm theo kiểu tới đâu hay tới đó. Mọi việc tưởng như đã xong, gần đây khi login vào Administrator Dashboard mới phát hiện ra có những thông báo rất điên đầu.

Thin đã mất một buổi sáng hôm nay để giải quyết cái thông báo lỗi đó.

Thông báo lỗi hình dáng ra sao?

Khi vào đường dẫn admin/reports/dblog nhìn thấy liên quan đến chạy cron thất bại. Sau khi chạy cron thủ công, xuất hiện thêm những dòng thông báo lỗi y chang. Chứng tỏ, cron đã không được chạy hoàn chỉnh như mong đợi do lỗi đó. Khi click vào xem chi tiết. Thin thấy nguyên nhân:

1
The “field_item:address” plugin does not exist.

Tìm trên mạng ra được vấn đề có tên chung The “X” plugin does not exist

Thay X bằng tên module đã được gỡ bỏ không đúng cách hoặc ngỡ là đúng cách nhưng có trục trặc sao đó.

Các từ ngữ trong Drupal bắt đầu gây bối rối cho người dùng. Nếu bạn không phải là người có kinh nghiệm về Drupal, hẳn là trong trường hợp trên, chữ plugin khiến bạn chẳng biết nó là cái quái gì. Tên của nó trong phần Administrator Dashboard là Extend, khi cài đặt nó người ta lại đề cập nó như là Module trên cộng đồng Drupal.

Thông báo tối nghĩa vô cùng, khiến người ta hoang mang. Thin phải query thủ công vào cơ sở dữ liệu xem thử có cái module nào mang tên như vậy không, hoàn toàn không. Tìm các file YAML xem có chứa thông tin nào gần gần như vậy không, không luôn. Thin gõ hàng tá câu lệnh find, grep, awk, sed trên cửa sổ lệnh terminal của server các kiểu để truy tìm xem có manh mối gì không, mọi thứ vô cùng mờ mịt.

Cuối cùng, bí quá, Thin đã dại dột vào xóa sạch tất cả module cài thêm cho Drupal, lúc này chỉ còn core thôi. Sau đó xóa cache nhiều lần cả bằng công cụ tự động được trang bị trong Administrator Dashboard và cách làm thủ công, dòng lệnh, bao gồm luôn khởi động lại web server, database server cho đến lúc đăng nhập vào Administrator Dashboard không còn thấy thông báo kia nữa.

Xong chưa? Chưa xong. Lúc đó, lại phải ngồi cài lại các module cần thiết đã bị xóa bỏ trong quá trình "diệt sạch" module để dẹp thông báo lỗi kia.

Cách gỡ bỏ Drupal module đúng cách là như thế nào?

- Đầu tiên cần lưu ý đến khuyến cáo dành cho sysadmin. Nếu bạn thích chế độ dòng lệnh, học lý thuyết gõ bỏ module Drupal luôn cập nhật mới tại Uninstall Modules. Bên dưới là cách dùng giao diện web thông thường trong Administrator Dashboard (trên drupal.org người ta gọi là Administrative Interface).

- Xem trong danh sách module của Drupal đã cài để xem module cần gỡ bỏ (uninstall) được cài để phục vụ cho module nào (Required by), ta lần lượt phải gỡ bỏ chúng trước. Có khi chúng ta lâm vào tình trạng là cứ phải lần lượt truy tìm như vậy cho đến hết. Nói cách khác: bạn có module A cần gỡ bỏ, nhưng nó phụ thuộc vào module B, rồi B phụ thuộc vào C, bạn phải gỡ bỏ từng manh mối một để trả module về tự do không còn phụ thuộc thì mới gỡ bỏ được nó. Ghi lại tất cả tên module, thư mục để sau này xóa bỏ khỏi ổ cứng vì Drupal không tự xóa bỏ các thư mục này.

- Chuyển site đang chạy Drupal 8 sang chế độ bảo trì (tức Maintenance mode) trước khi thực hiện gỡ bỏ module.

- Khi một module cần gỡ bỏ đã hoàn toàn được các module phụ thuộc, nó đã ở trạng thái có thể gỡ bỏ. Lúc này ta mới vào admin/modules/uninstall chọn nó để gỡ bỏ.

- Nhớ xóa cache sau khi gỡ bỏ module xong, lại vào admin/reports/dblog xem có báo lỗi gì không. Nếu có thấy lỗi sẽ phải khắc phục trước khi 

- Ghi nhớ lại các module để sau đó xóa bỏ thư mục chứa chúng khỏi ổ cứng. Sau 72 giờ nếu mọi thứ đều ổn, không xuất hiện báo lỗi hoặc lỗi nào gây trở ngại cho sự vận hành website thì mới truy cập vào thư mục module để xóa bỏ hẳn bằng lệnh rm -rf tên-thư-mục-chứa-module

Sẽ lại phải dời blog sang nền tảng khác ngoài Drupal?

Nếu phát biểu cảm tưởng lúc này, Thin chỉ biết nói "tui bắt đầu cảm thấy sợ PHP và muốn nhảy khỏi nó".

Sau bài này, Thin cho rằng đã đến lúc tìm một thứ gì khác để chuyển sang, suốt ngày đi gỡ rối cái phần mềm web Drupal CMS này mệt quá, mặc dù nó rất hay, từng khen nó hết lời.

Xem ra PHP là một ngôn ngữ lập trình có kiến trúc dở tệ, dù đã cải tiến qua nhiều phiên bản. Mặc dù hiện nay trên thế giới có rất nhiều ứng dụng web rất hay được viết bằng PHP. Phải nói là đội ngũ viết web PHP đã nỗ lực rất nhiều, lỗi phát sinh lại nhiều vô kể không phải do họ viết mã kém mà gốc rễ là ngôn ngữ PHP được xây dựng quá lộn xộn. Drupal CMS là trường hợp như vậy.

Việc một lần nữa di chuyển blog này sang một nền tảng mới xem ra là việc làm rỗi hơi, điên rồ vì Drupal đã quá tốt, mọi thứ xem ra vẫn đang vận hành suôn sẻ. Nhưng, biết đâu được, Thin cảm thấy nản chí với việc ngồi debug PHP quá rồi. Mặc dù Drupal tốt, dựng trên nền PHP framework (Symfony) được xem là tốt nhất hiện nay. Tốt đẹp vậy mà còn gây ra những khó khăn như vậy, việc nhảy khỏi PHP để tránh đau thương có khi cũng phải tính đến./.