Symfony 4如何启用prod模式?

gun*_*s17 8 symfony

在Symfony 4中,index.php默认设置dev模式

$env = $_SERVER['APP_ENV'] ?? 'dev';
Run Code Online (Sandbox Code Playgroud)

Symfony官方文档说:Symfony Dotenv应该只用于开发/测试/登台环境.对于生产环境,请使用"真实"环境变量.

所以我理解:APP_ENV=prod因为环境变量是强制启用prod模式的.

我对吗?

dbr*_*ann 12

您必须确保APP_ENV在生产环境中正确设置环境变量.该文档告诉您如何为各种Web服务器执行此操作.例如,在您必须使用的Apache配置中SetEnv.这看起来像这样:

DocumentRoot /var/www/project/public
<Directory /var/www/project/public>
    AllowOverride None
    Order Allow,Deny
    Allow from All

    <IfModule mod_rewrite.c>
        Options -MultiViews
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ index.php [QSA,L]
    </IfModule>
</Directory>

SetEnv APP_ENV prod
SetEnv APP_DEBUG 0
...
Run Code Online (Sandbox Code Playgroud)

nginx的类似配置会使用fastcgi_param,看起来有点像这样:

location ~ ^/index\.php(/|$) {
    fastcgi_pass unix:/var/run/php7.1-fpm.sock;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;

    fastcgi_param APP_ENV prod;
    fastcgi_param APP_DEBUG 0;
}
Run Code Online (Sandbox Code Playgroud)

doc页面有点意思,因为各个位被注释掉了.

如果您想使用内置的Web服务器模拟生产环境,您可以这样做:

APP_ENV=prod APP_DEBUG=0 bin/console server:run
Run Code Online (Sandbox Code Playgroud)

这需要使用composer安装server-pack,当然您也可以设置命令选项--env,以获得相同的效果.