【问题标题】:Symfony 4 debug production environmentsSymfony 4 调试生产环境
【发布时间】:2018-03-02 08:00:46
【问题描述】:

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

【问题讨论】:

  • 是什么阻止你添加和测试在public/index.php 中的一些代码行之后发生的变化,以便在 config/bootstrap.php 中设置$_SERVER['APP_ENV']$_SERVER['APP_DEBUG']$_ENV['APP_DEBUG']
  • 如果我将它添加到 index.php 所有用户将在 DEV 环境中使用该应用程序而不是 PROD。如果我将其添加为 IP 依赖​​项,我将在 DEV 模式下看到该应用程序。这个想法是在我需要时使用 DEV 而无需更改代码中的任何内容。
  • ) 因为指定 ip 以允许 DEV 仅用于特定的 IP,而不是全部)而不更改代码中的任何内容 - 不可能!您必须在 index.php 上更改您的 apache *.conf 或启动另一个输入脚本,该脚本将作为 index.php 加载,但使用您预先安装的配置(可能使用登录名/密码,仅通过 1 个 IP)

标签: symfony debugging symfony4


【解决方案1】:

您可以复制/粘贴index.phpdev.php 并更改:

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

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

您可以在您的操作后为您限制 IP 或删除。

【讨论】:

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

由系统环境变量配置的 Symfony 环境。所以只需添加 apache 应用程序配置(默认为 .htaccess)类似 SetEnvIf Remote_Addr "127.0.0.1" APP_ENV=dev APP_DEBUG=1 (需要https://httpd.apache.org/docs/trunk/mod/mod_setenvif.html

【讨论】:

  • 是的,但是这样我在我的 IP 上总是有调试环境。很多时候,我遇到了一个存在于 Prod env 中但不存在于 dev 中的问题。正如@Gaylord.P 所写,我可以同时拥有 app 和 app_dev 并在需要时使用它。我只是不明白为什么 Symfony 2 和 3 还可以,而 4 则不行
  • 基于在回答stackoverflow.com/a/48869783/5809937启用env这个解决方案更好
【解决方案3】:

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

从 localhost 机器请求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 或计算机。

【讨论】:

    【解决方案4】:

    这是一个有点宽泛的问题。

    最好的方法是使用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(如果存在)。 当您设置环境开发时,您正在加载 config/packages/dev/web_profiler.yaml 并且在生产中,该插件没有定义,默认不显示。

    这里有更多关于 symfony 4 环境设置的信息 .https://symfony.com/doc/current/configuration/environments.html

    【讨论】:

      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 2014-05-31
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多