如何在生产环境中调试Symfony 4项目?我的意思是只有来自特定IP的我才能做到这一点。在Symfony 2/3中我有app_dev.php控制器。如何使用Symfony 4和Apache做到这一点? 如果我将.env或通过VirtualHost APP_ENV更改为dev,则所有应用程序用户都将看到调试工具栏,异常日志等。
答案 0 :(得分:1)
您可以复制/粘贴index.php
dev.php
并更改:
//$env = $_SERVER['APP_ENV'] ?? 'dev';
$env = 'dev';
您可以限制IP或删除操作后删除。
答案 1 :(得分:1)
由系统环境变量配置的Symfony环境。所以只需添加apache app config(默认为.htaccess)
SetEnvIf Remote_Addr "127.0.0.1" APP_ENV=dev APP_DEBUG=1
(需要https://httpd.apache.org/docs/trunk/mod/mod_setenvif.html)
答案 2 :(得分:0)
这是一个广泛的问题。
最好的方法是使用像monolog这样的日志记录工具,默认输出目录是project/var/log/env.log
。
为什么您看到all app users will see debug toolbar, exception logs etc.
与您的环境设置有关。
Symfony 4环境设置的工作方式如下,加载config/packages/(env)/package.yaml
然后加载默认/生产配置config/packages/package.yaml
(如果存在)。
当您设置env dev时,您正在加载config/packages/dev/web_profiler.yaml
并且在生产中,该插件没有默认不显示的定义。
以下是有关symfony 4中的环境设置的更多信息。https://symfony.com/doc/current/configuration/environments.html
答案 3 :(得分:0)
我不建议在生产环境中使用探查器,尽管如果使用如下配置,可以使用Apache来“模仿” Symfony 2-3行为:
<VirtualHost *:80>
...
DocumentRoot "/yourRootDirectory"
<Directory "/yourRootDirectory/">
DirectoryIndex index.php
Require all granted
</Directory>
...
SetEnvIf Request_URI ^/app_dev.php APP_ENV=dev
Alias /app_dev.php "/yourRootDirectory/"
<Location "/app_dev.php">
Require local
</Location>
...
</VirtualHost>
从本地主机请求http://localhost/app_dev.php
,您可以在开发模式下以Symfony 4,5中的应用程序使用Symfony 2、3中的探查器来获取应用程序。
请特别注意Require local
作为您的别名,您也可以使用Require ip 192.168.1.1 127.0.0.1
或所需的IP(请参阅Apache文档)。但是要小心,将开发环境暴露在不受您控制的ip或计算机上。