如何详细实现Laravel部署环境间的切换?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1174个文字,预计阅读时间需要5分钟。
环境切换的本质是控制 + `APP_ENV` 和 + `APP_DEBUG` 这两个核心配置,但直接修改 + `.env` + 文件在部署中极易出错——例如Git误提交、多环境覆盖、权限问题等导致读取失败。
正确做法是绕过 .env,用服务器环境变量接管:
-
APP_ENV=production必须设为production,否则 Laravel 不会启用缓存配置、路由、视图,性能直接受损 -
APP_DEBUG=true在生产环境绝对禁止,不仅暴露敏感路径和 DB 信息,还可能触发异常堆栈写入日志引发磁盘爆满 - Nginx/Apache 中通过
fastcgi_param或SetEnv注入,比依赖.env更可靠;Docker 则用environment:块声明 - 验证是否生效:执行
php artisan tinker后输入app()->environment()和config('app.debug'),结果必须分别是"production"和false
为什么 php artisan config:cache 在部署后必须运行
开发时 Laravel 每次请求都重新加载 config/*.php,但生产环境不 cache 就等于裸奔:配置解析开销大、无法利用 OPCache 预编译优势、甚至某些扩展(如 Horizon)启动直接报错。
本文共计1174个文字,预计阅读时间需要5分钟。
环境切换的本质是控制 + `APP_ENV` 和 + `APP_DEBUG` 这两个核心配置,但直接修改 + `.env` + 文件在部署中极易出错——例如Git误提交、多环境覆盖、权限问题等导致读取失败。
正确做法是绕过 .env,用服务器环境变量接管:
-
APP_ENV=production必须设为production,否则 Laravel 不会启用缓存配置、路由、视图,性能直接受损 -
APP_DEBUG=true在生产环境绝对禁止,不仅暴露敏感路径和 DB 信息,还可能触发异常堆栈写入日志引发磁盘爆满 - Nginx/Apache 中通过
fastcgi_param或SetEnv注入,比依赖.env更可靠;Docker 则用environment:块声明 - 验证是否生效:执行
php artisan tinker后输入app()->environment()和config('app.debug'),结果必须分别是"production"和false
为什么 php artisan config:cache 在部署后必须运行
开发时 Laravel 每次请求都重新加载 config/*.php,但生产环境不 cache 就等于裸奔:配置解析开销大、无法利用 OPCache 预编译优势、甚至某些扩展(如 Horizon)启动直接报错。

