Laravel không đọc tệp .env sau khi thay đổi

Laravel Is Not Reading



Vấn đề

Đây là một vấn đề khá phổ biến xuất hiện giữa các nhà phát triển Laravel mới.

Rất nhiều người đã cố gắng cập nhật tệp .env của họ chỉ để thấy rằng khi họ làm mới ứng dụng của mình, các giá trị cấu hình .env không hiển thị.







Và điều thú vị hơn là khá thường xuyên, điều này sẽ hiển thị sau khi bạn nâng cấp phiên bản Laravel của mình.



Vì vậy, ví dụ, bạn sẽ có cái này trong tệp .env của mình:



DB_DATABASE=laraveldb
DB_USERNAME=laraveluser

Sau đó, tự nhiên, bên trong tệp config / database.php, bạn sẽ có cái này:





‘Mysql’=> [
' cơ sở dữ liệu '=>env(‘DB_DATABASE’,'đùi'),
'tên tài khoản'=>env(‘DB_USERNAME’,'đùi'),
]

forge ở đây là viết tắt của các giá trị mặc định. Điều này có nghĩa là những giá trị này sẽ được sử dụng trong trường hợp bạn chưa cung cấp DB_DATABASEDB_USERNAME các giá trị bên trong tệp .env của bạn. Thông tin này sẽ hữu ích trong một chút.

Bây giờ, làm thế nào bạn biết mình đã gặp phải sự cố cụ thể này là nếu bạn gặp phải trường hợp ngoại lệ sau:



PDOException: SQLSTATE[HY000] [1045]Quyền truy cập bị từ chối đối với người sử dụng ‘Lar’ @ ’localhost’
( sử dụng mật khẩu mở khóa : KHÔNG )

Điều này cho thấy rõ ràng rằng ứng dụng Laravel của bạn đang lấy giá trị mặc định từ config / database.php chứ không phải từ .env của bạn.

Trước khi làm bất cứ điều gì khác, bạn cũng có thể thử xác minh vấn đề này bằng cách sử dụng thợ làm thủ công củaphp:

>>>env(‘DB_DATABASE’)
=> vô giá trị
>>>getenv(‘DB_DATABASE’)
=> sai
>>>cấu hình(' cơ sở dữ liệu .connections.mysql. cơ sở dữ liệu ')
=>đùi
>>>dd($ _ENV)
[]

Bạn sẽ thường thấy rằng làm những điều sau đây cũng sẽ không tạo ra sự khác biệt. Tuy nhiên, các nhà phát triển cố gắng kiểm tra cấu hình của họ bằng cách chạy một bản cài đặt Laravel hoàn toàn mới và chỉ sao chép thư mục ứng dụng cũ. Họ không chạy bất kỳ cài đặt gói trình soạn nhạc nào hoặc làm bất kỳ điều gì khác.

Trừ khi bạn đang sử dụng Linux (tôi sẽ cho bạn biết lý do sau một chút), bạn sẽ không thấy bất kỳ thay đổi nào.

Dung dịch

Như mọi khi, có rất nhiều điều bạn có thể làm để cố gắng giải quyết vấn đề này nhưng một vài trong số đó có nhiều khả năng thành công hơn.

Xóa bộ nhớ cache cấu hình của bạn

Trước hết, nếu bạn chưa xóa, bạn phải xóa bộ nhớ cache cấu hình của mình trước khi bạn có thể làm bất kỳ điều gì khác.

Bởi vì mã của chúng tôi ngày nay đang sử dụng quá nhiều thư viện, chúng tôi buộc phải lưu vào bộ nhớ cache mọi thứ để truy cập nhanh vào chúng trong thời gian chạy.

Cá nhân tôi đã gặp sự cố với điều này trên Windows và Mac, tuy nhiên, tôi nhận thấy rằng vì một số lý do, trên Linux (Ubuntu), các tệp cấu hình này hoặc bị xóa bằng một số loại móc hoặc chúng không được lưu trữ trong bộ nhớ cache, bởi vì tôi có thể tải lại ứng dụng với các giá trị .env mới mà không cần thực hiện các thao tác sau.

Đảm bảo rằng bạn xóa bộ nhớ cache cấu hình của mình bằng cách chạy các lệnh sau:

cấu hình nghệ nhân php:bộ nhớ đệm
cấu hình nghệ nhân php:sạch

Kiểm tra các khoảng trống trong tệp .env của bạn

Giải pháp tiếp theo là về việc có khoảng trắng bên trong tệp .env của bạn. Và đây là nơi mà hầu hết mọi người thất bại và bắt đầu vò đầu bứt tóc.

Rất dễ bỏ lỡ điều này nhưng để làm ví dụ, những gì bạn có thể có trong tệp .env của mình là một cái gì đó như sau:

TÊN TRANG WEB=Ứng dụng Laravel của tôi

Chỉ điều này sẽ không hoạt động vì khoảng trắng sẽ làm hỏng tệp .env.

Những gì bạn cần làm là đặt các giá trị của bạn bên trong các dấu ngoặc kép như sau:

TÊN TRANG WEB=Ứng dụng Laravel của tôi

Thời gian này mọi thứ sẽ hoạt động tốt.

Chỉ cần đảm bảo xóa bộ nhớ cache cấu hình của bạn mỗi khi bạn thực hiện thay đổi. Chúng ta có thể làm điều này giống như trước đây:

cấu hình nghệ nhân php:bộ nhớ đệm
cấu hình nghệ nhân php:sạch