Symfony 4 调试生产环境

4
如何在生产环境下调试Symfony 4项目?我的意思是只有我从特定IP才能这样做。在Symfony 2/3中,我有app_dev.php控制器。如何在Symfony 4和Apache中实现这一点? 如果我通过VirtualHost或.env更改APP_ENV为dev,则所有应用程序用户都将看到调试工具栏、异常日志等。

你为什么不在 public/index.php 中添加并测试一些代码行后的更改,以硬编码设置 $_SERVER['APP_ENV']$_SERVER['APP_DEBUG']$_ENV['APP_DEBUG'],就像在 config/bootstrap.php 中一样? - Vladimir Ch
如果我将其添加到index.php中,所有用户将在DEV环境中使用该应用程序而不是PROD。 如果我将其作为IP依赖项添加,则始终会以DEV模式查看应用程序。 这个想法是在不需要更改代码的情况下随时使用DEV。 - Tom
当然要指定IP以允许仅限特定IP的DEV,而不是所有人。但是不更改代码是不可能的!您必须在apache *.conf上更改index.php或启动另一个输入脚本,该脚本将作为已预安装配置的index.php加载(也许只能由1个IP登录/密码)。 - Vladimir Ch
4个回答

2

是的,但这样我将始终在我的IP上拥有调试环境。很多时候,我遇到了在生产环境中存在但在开发环境中不存在的问题。正如@Gaylord.P所写,我可以同时拥有app和app_dev,并在需要时使用它们。我只是不明白为什么Symfony 2和3可以,而4却不行。 - Tom
基于启用环境的答案 https://dev59.com/t1UM5IYBdhLWcg3wa_q7#48869783,这个解决方案更好。 - Vladimir Ch

2
您可以将index.php复制/粘贴为dev.php并更改:

//$env = $_SERVER['APP_ENV'] ?? 'dev';
$env = 'dev';

http://yourwebsite.com/dev.php/

您可以限制IP或在操作后将其删除。


那对我来说将是最佳选择。我想知道Symfony的作者为什么决定不使用它。 - Tom
调试在生产环境中不安全 :) 你可以使用日志 (/var/logs) 来进行调试 :) - Gaylord.P
是的,但是生产日志没有开发日志那么多的数据。这样就无法使用Profiler进行调试。对我来说,app_dev是一个很好的解决方案。所以我可能会按照你写的方式去做,复制粘贴并进行限制。我只是不明白为什么Symfony 2和3可以,而4却不行。 - Tom
Monolog在这些情况下非常有用。您可以为异常创建事件侦听器,并为自己创建高度指定的消息。 - Sean Bahrami

1
我不建议在生产环境中使用分析器,尽管使用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或计算机。

0

这是一个比较广泛的问题。

最好的方法是使用像monolog这样的日志工具,其默认输出目录为project/var/log/env.log

为什么你会看到所有应用程序用户都将看到调试工具栏、异常日志等与你的环境设置有关。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接