Laravel ไม่อ่านไฟล์ .env หลังจากการเปลี่ยนแปลง

Laravel Is Not Reading



ปัญหา

สิ่งนี้หากเป็นปัญหาทั่วไปที่ปรากฏขึ้นในหมู่นักพัฒนา Laravel รายใหม่

ผู้คนจำนวนมากพยายามอัปเดตไฟล์ .env ของตนเพียงเพื่อดูว่าเมื่อรีเฟรชแอปพลิเคชัน ค่า .env config จะไม่ปรากฏขึ้น







และสิ่งที่น่าสนใจกว่านั้นคือบ่อยครั้ง ซึ่งจะปรากฏขึ้นหลังจากที่คุณอัปเกรดเวอร์ชัน Laravel ของคุณ



ตัวอย่างเช่น คุณจะมีสิ่งนี้ในไฟล์ .env ของคุณ:



DB_DATABASE=laraveldb
DB_USERNAME=laraveluser

โดยปกติภายในไฟล์ config/database.php คุณจะมีสิ่งนี้:





'mysql'=> [
' ฐานข้อมูล '=>สิ่งแวดล้อม('DB_DATABASE','ต้นขา'),
'ชื่อผู้ใช้'=>สิ่งแวดล้อม('DB_USERNAME','ต้นขา'),
]

ปลอมที่นี่หมายถึงค่าเริ่มต้น ซึ่งหมายความว่าจะใช้ค่าเหล่านี้ในกรณีที่คุณไม่ได้ระบุ DB_DATABASE และ DB_USERNAME ค่าภายในไฟล์ .env ของคุณ ข้อมูลนี้จะมีประโยชน์ในอีกสักครู่

ตอนนี้คุณรู้ได้อย่างไรว่าคุณมีปัญหานี้คือถ้าคุณพบข้อยกเว้นต่อไปนี้:



PDOException: SQLSTATE[HY000] [1045]การเข้าถึงถูกปฏิเสธสำหรับ ผู้ใช้ 'lar'@'localhost'
( โดยใช้ รหัสผ่าน : ไม่ )

นี่แสดงให้เห็นชัดเจนว่าแอปพลิเคชัน Laravel ของคุณกำลังดึงค่าเริ่มต้นจาก your config/database.php ไฟล์และไม่ได้มาจาก .env ของคุณ

ก่อนทำอย่างอื่น คุณสามารถลองตรวจสอบปัญหานี้โดยใช้php artisan tinker ได้เช่นกัน:

>>>สิ่งแวดล้อม('DB_DATABASE')
=> โมฆะ
>>>getenv('DB_DATABASE')
=> เท็จ
>>>config(' ฐานข้อมูล .connections.mysql ฐานข้อมูล ')
=>ต้นขา
>>>dd($ _ENV)
[]

คุณมักจะเห็นว่าการทำสิ่งต่อไปนี้จะไม่สร้างความแตกต่างเช่นกัน อย่างไรก็ตาม นักพัฒนาพยายามทดสอบการกำหนดค่าโดยเรียกใช้การติดตั้ง Laravel ใหม่ทั้งหมด และเพียงแค่คัดลอกโฟลเดอร์แอปเก่า พวกเขาไม่ได้เรียกใช้การติดตั้งแพ็คเกจผู้แต่งหรือทำอย่างอื่น

เว้นแต่ว่าคุณใช้ Linux (ฉันจะบอกคุณว่าทำไมในภายหลัง) คุณจะไม่เห็นการเปลี่ยนแปลงใดๆ

สารละลาย

และเช่นเคย มีหลายสิ่งที่คุณสามารถทำได้เพื่อพยายามแก้ปัญหานี้ แต่บางวิธีมีแนวโน้มที่จะประสบความสำเร็จมากกว่า

ล้างแคชการกำหนดค่าของคุณ

ก่อนอื่น ถ้ายังไม่ได้ คุณต้องล้างแคชการกำหนดค่าก่อนจึงจะทำอย่างอื่นได้

เนื่องจากโค้ดของเราใช้ไลบรารีจำนวนมากในปัจจุบัน เราจึงถูกบังคับให้แคชของสิ่งต่างๆ เพื่อให้เข้าถึงได้อย่างรวดเร็วระหว่างรันไทม์

โดยส่วนตัวฉันมีปัญหากับสิ่งนี้ใน Windows และ Mac แต่ฉันสังเกตเห็นว่าด้วยเหตุผลบางอย่างบน Linux (Ubuntu) ไฟล์กำหนดค่าเหล่านี้อาจถูกล้างด้วย hook บางประเภทหรือไม่ได้ถูกแคชเลยเพราะฉันสามารถทำได้ โหลดแอปพลิเคชันใหม่ด้วยค่า .env ใหม่โดยไม่ต้องทำสิ่งต่อไปนี้

ตรวจสอบให้แน่ใจว่าคุณล้างแคชการกำหนดค่าของคุณโดยเรียกใช้คำสั่งต่อไปนี้:

php artisan config:แคช
php artisan config:แจ่มใส

ตรวจสอบช่องว่างภายในไฟล์ .env ของคุณ

วิธีแก้ปัญหาต่อไปคือการมีช่องว่างสีขาวในไฟล์ .env ของคุณ และอันนี้ถ้าคนส่วนใหญ่ล้มเหลวและเริ่มฉีกผม

เป็นเรื่องง่ายมากที่จะพลาดสิ่งนี้ แต่สำหรับตัวอย่างสิ่งที่คุณอาจมีในไฟล์ .env ของคุณคือสิ่งนี้:

SITE_NAME=แอปพลิเคชัน Laravel ของฉัน

วิธีนี้ใช้ไม่ได้ผลเนื่องจากพื้นที่สีขาวจะทำให้ไฟล์ .env เสียหาย

สิ่งที่คุณต้องทำคือห่อค่าของคุณไว้ในเครื่องหมายคำพูดดังนี้:

SITE_NAME=แอปพลิเคชัน Laravel ของฉัน

คราวนี้ทุกอย่างควรทำงานได้ดี

เพียงตรวจสอบให้แน่ใจว่าได้ล้างแคชการกำหนดค่าทุกครั้งที่ทำการเปลี่ยนแปลง เราสามารถทำได้เหมือนเดิม:

php artisan config:แคช
php artisan config:แจ่มใส