Tôi đã debug lỗi Class config does not exist trong Laravel như thế nào ?
Gần đây, tôi đang băn khoăn xem không rõ các bạn dev sẽ tư duy như thế nào để giải quyết một vấn đề trong khi làm việc, có những vẫn đề tôi nghĩ là ai cũng có thể làm được nhưng có vẻ không phải vậy. Song song với việc tìm hiểu này, tôi muốn chia sẻ về cách tôi nhìn nhận vấn đề thông qua những câu chuyện thực tế, biết đâu cách này sẽ có tác dụng với các bạn junior dev vì có thể tham khảo được 1 điều gì đó.
7h tối thứ 6, trong khi đang trông con cho vợ đi dạy tiếng Nhật, 1 bạn member ở công ty nhắn cho tôi qua Skype:
Thông thường thì tôi không trả lời Skype vào giờ này, nhưng vì là tối thứ 6 và tận 7h tối rồi mà bạn ấy chưa được về nhà, tôi dùng điện thoại của mình click thử vào link và nhìn thấy lỗi như hình dưới.
À, đây nó lỗi không tìm thấy class, nếu như server đã chạy bình thường mà tự dưng xuất hiện lỗi này thì có thể sảy ra một số trường hợp:
- Source code bị mất file hoặc thay đổi quyền dẫn tới Web Server không đọc được file.
- Composer không index class đó nên bị lỗi này.
trường hợp 1 ít sảy ra hơn nên tôi hỏi thử member của mình về trường hợp 2:
Thử composer dump-autoload chưa em?
Thì được bạn ấy báo đã chạy, và gặp lỗi:
à thì ra có package mới bạn ấy phải install trên server nhưng việc cài đặt này không thành công nên đúng là sẽ bị lỗi Class config does not exist.
Từ thông báo lỗi nguyên nhân: Dotenv value containing spaces must be surrounded by quotes
, vậy là trong .env đã có giá trị nào đó bạn ấy set có dấu cách mà không để trong dấu "
nên thư viện Dotenv sẽ coi đó là exception làm php artisan package:discover
trong post-autoload-dump
event trong composer không được thực hiện.
Để fix lỗi này thì đơn giản là kiểm tra lại file .env, tìm tới dòng nào có giá trị có dấu cách thì sửa lại thêm "
cho giá trị này là được.
Lần này thì hoá ra là do khách hàng tự ý vào sửa và không báo giá trị
EMAIL_NAME=Tên Khách Hàng
và vấn đề là tên có dấu cách nên tèo :D
Đơn giản chỉ cần sửa lại
EMAIL_NAME="Tên Khách Hàng"
chạy lại composer install là xong.
Vấn đề:
Qua trao đổi giữa member tôi thấy có mấy vấn đề mà mình chưa hiểu được:
-
Trong tin nhắn đầu tiên bạn ấy nhắn thông báo "server đang test bình thường lại bị lỗi". Sau truy ra thì hoá ra do khách hàng tự vào "vọc" sửa đổi .env của app thành ra app bị lỗi. Lại là lỗi trên server nên có thể junior sẽ bị mất bình tĩnh mà không tìm được lỗi với những lỗi phức tạp. Nên bình tĩnh và tìm người hỗ trợ như bạn member ở công ty cũng là kỹ năng tốt, không nhất thiết phải 1 mình cố gắng giải quyết vấn đề trong khi server đang "cháy".
-
Khi chạy composer install vấn đề đã được chỉ rõ bằng thông báo
Dotenv value containing spaces must be surrounded by quotes
nhưng không hiểu sao member không biết để tự xử lý. Có thể do không biết Dotenv là gì mà chỉ biết là framework hỗ trợ thiết lập thông tin vào trong file.env
mà không rõ việc này được làm như thế nào nên dù có thấy thông báo lỗi cũng không biết phải xử lý ra sao? . Các bạn junior sau khi làm quen với 1 framework nào đó, đã sử dụng được các tính năng của nó nên tìm hiểu tới mứchow
, tức là tìm hiểu xem tính năng đó được xử lý như thế nào bằng cách tự đọc code và memo lại hoặc đọc thêm các tài liệu liên quan tới framework. Như thế bạn sẽ hiểu hơn về framework bạn đang sử dụng, tư duy thiết kế và các design pattern hay được áp dụng trong việc xây dựng 1 framework, sẽ giúp ích cho bạn rất nhiều trong việc thiết kế và triển khai ứng dụng, cũng như debug.