【问题标题】:Yii2: How to prepare for debug and production environment?Yii2:如何准备调试和生产环境?
【发布时间】:2018-12-01 19:19:12
【问题描述】:

我知道 Yii 定义和使用常量 YII_DEBUGYII_ENV。 当然,它们在我的本地机器上设置为 'true' 和 'dev'。这是因为基本应用程序模板已在 index.php 文件中以这种方式准备它。该文件还告诉我,我应该删除生产模式的那些行,即在生产机器上。然后这些常量默认设置为“false”和“prod”。没关系,我理解。 (更多信息请访问Defining ConstantsEnvironment Constants。)

我的问题:当 index.php 包含在 VCS 中时,我怎样才能最好地处理这些常量? 在一种环境中它们应该存在,而在另一种环境中则不存在。当然,它也可以是一台测试机器。我有哪些选择?我觉得这也是部署方式的问题。目前,我只是通过 Git 推送到生产机器,什么是原始部署 IMO...

你是怎么做到的?你有什么建议?

编辑:实际上,处理 params 文件是同样的问题。

【问题讨论】:

  • 建议不要commit index.php,这样就不用每次都改了。
  • 或者干脆把 index.php 放到 .gitignore 中
  • @Ankit 将此作为官方答案!应该是可投票的。

标签: php version-control configuration yii2 web-deployment


【解决方案1】:

这是我的解决方案:

if ($_SERVER['SERVER_NAME'] == 'localhost' || $_SERVER['SERVER_NAME'] == '127.0.0.1') {
  defined('YII_DEBUG') or define('YII_DEBUG', true);
  defined('YII_ENV') or define('YII_ENV', 'dev');
}

也适用于 Heroku,Setup Yii2 Advanced on Heroku

【讨论】:

    【解决方案2】:

    Yii2(或者至少是高级应用模板)有一个系统“environments”。在此文件夹中,您可以存储根据环境更改的文件。

    这些文件通常是您的引导文件 (index.php) 和“本地”配置文件(覆盖主配置的东西)。

    应用模板还有一个“init”命令可以让你切换。

    基本上发生的情况是您将整个environments-文件夹添加到您的VCS,但您忽略了这些文件应该结束的位置(就像Ankit已经说过的那样)。通过这种方式,您可以在 VCS 中将所有不同的环境相关配置彼此相邻。

    有关更多信息,请参阅here,有关此文件夹外观的示例,请参阅here

    【讨论】:

    • 谢谢,我得考虑一下。实际上它只是高级应用程序模板的一部分,而不是 Yii 本身。但是,基本模板或每种类型的应用程序都应该有相同的环境问题。
    • 你完全正确。 Imo 基本模板也应该包含环境。也许他们应该添加第三个应用程序模板(“简约”左右),让您快速测试一些东西。那么“基本”可能会成为“专业使用的最轻配置”之类的
    • This page 很好地解释了这个概念。
    【解决方案3】:

    另一个简单的解决方案:

    文件 index.php(进入 VCS 存储库):

    <?php
    
    @include 'my-env.php';
    
    require(__DIR__ . '/../vendor/autoload.php');
    require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
    
    $config = require(__DIR__ . '/../config/web.php');
    
    (new yii\web\Application($config))->run();
    

    文件 my-env.php:

    <?php
    
    defined('YII_DEBUG') or define('YII_DEBUG', true);
    defined('YII_ENV') or define('YII_ENV', 'dev');
    

    my-env.php 不会被添加到 VCS。它可以存在也可以不存在。如果没有,应用程序会在生产模式下自动运行。 my-env.php 也可以放在 config 文件夹中。

    与 Ankit 的方法相比,这是一个小的改进,因此可以将 index.php 添加到 VCS。因此,VCS 存储库包含所有必需的文件,无需任何手动修改即可部署。

    【讨论】:

      【解决方案4】:

      您是否有权访问设置虚拟主机的配置文件?如果是这样你可以在&lt;/Directory&gt;&lt;/VirtualHost&gt;之间添加setEnv YII_DEBUG "true"

      【讨论】:

      • 这确实也是一种有趣的做法。
      【解决方案5】:

      提交一次index.php,然后将其添加到.gitignore。这样您就不必每次都更改它。

      只需在.gitignore中添加/web/index.php

      【讨论】:

      • 如果其他开发人员签出项目怎么办?您必须通过电子邮件将 index.php 发送给他们?
      • index.php 将位于远程仓库中,并且作为克隆的一部分可供团队成员使用,但它不会跟踪对 index.php 的任何本地更改。这也是 Yii2 的建议方法。
      • init 脚本在我们运行时会生成所有(目标)环境特定文件,包括 index.php。
      【解决方案6】:

      Yii2 与作曲家一起工作。一个问题是如何处理composer.lock

      在我的 Yii2 生产站点中,我将 composer.lock 设置为 .gitignore,以便我可以根据生产问题决定作曲家更新,并在 git pull 更新生产站点期间保持 composer.lock 的生产版本不变。

      我的 .gitignore 的最后几行是:

       # exclude composer.lock from versioning 
       composer.lock
      

      【讨论】:

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