Symfony 2.8升级至3.4后生产环境仍为Dev模式问题排查
解决Symfony 3.4部署后仍处于Dev环境的问题
我之前升级Symfony版本时也碰到过一模一样的环境模式不切换的问题,结合你的情况,咱们一步步排查解决:
1. 补全.htaccess中的环境变量配置
Symfony 3.4依赖Apache的环境变量来识别运行环境,你需要在.htaccess文件中明确设置生产环境的参数。把以下代码添加到你的.htaccess里(通常放在文件开头或者Rewrite规则之前):
# 设置生产环境 SetEnv APP_ENV prod SetEnv APP_DEBUG 0
如果你的服务器用的是FastCGI/FPM,可能需要用FcgidInitialEnv替代SetEnv,比如:
<IfModule mod_fcgid.c> FcgidInitialEnv APP_ENV prod FcgidInitialEnv APP_DEBUG 0 </IfModule>
另外要确保你的Apache开启了mod_env模块,不然这些环境变量不会生效。
2. 验证public/index.php的环境读取逻辑
打开项目根目录下的public/index.php(Symfony 3.4的入口文件在public目录),确认它的环境检测代码是正确的:
$env = getenv('APP_ENV') ?: 'dev'; $debug = getenv('APP_DEBUG') !== '0' && getenv('APP_DEBUG') !== false; $kernel = new AppKernel($env, $debug);
这段代码的逻辑是优先读取环境变量中的APP_ENV,没有的话才默认用dev,如果这段代码被修改过(比如硬编码成了dev),那环境变量设置再对也没用。
3. 强制清除生产环境缓存并修复权限
升级后旧的Dev环境缓存可能还在,直接覆盖了新的配置。登录服务器执行以下命令:
# 清除生产环境缓存 php bin/console cache:clear --env=prod --no-debug # 修复缓存目录权限(根据服务器用户组调整,比如www-data) chown -R www-data:www-data var/cache var/logs chmod -R 755 var/cache var/logs
注意:不要用Dev环境的缓存命令来清生产环境的缓存,必须指定--env=prod。
4. 检查虚拟主机(vhost)配置
有时候.htaccess的设置会被虚拟主机的配置覆盖,打开你的服务器vhost配置文件,确认里面没有设置相反的环境变量,并且开启了AllowOverride All让.htaccess生效:
<VirtualHost *:80> ServerName mydomain.com DocumentRoot /path/to/your/project/public # 确保这里的环境变量和.htaccess一致 SetEnv APP_ENV prod SetEnv APP_DEBUG 0 <Directory /path/to/your/project/public> AllowOverride All Require all granted </Directory> </VirtualHost>
修改vhost后记得重启Apache服务。
额外注意点
- 如果是共享主机,有些服务商禁止使用
SetEnv,可以尝试用php_value auto_prepend_file来设置环境变量,但这种方式不如直接设置环境变量可靠; - 可以通过在
index.php中添加var_dump(getenv('APP_ENV')); exit;来快速验证环境变量是否正确读取,确认没问题后再删掉这段调试代码。
内容的提问来源于stack exchange,提问作者Developer
相关产品推荐
相关产品推荐

