Yii2:如何为调试和生产环境做好准备


Yii2: How to prepare for debug and production environment?

我知道Yii定义并使用常量YI_DEBUGYI_ENV当然,在我的本地机器上,它们被设置为"true"answers"dev"。这是因为基本的应用程序模板在index.php文件中以这种方式进行了准备。这个文件还告诉我应该删除那些生产模式的生产线,即在生产机器上。然后这些常量默认设置为"false"answers"prod"。没关系,我理解。(更多信息可以在定义常数和环境常数上找到。)

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

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

编辑:实际上,处理params文件也是一个问题。

这是我的解决方案:

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,在Heroku 上设置Yii2 Advanced

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

这些文件通常是引导文件(index.php)和"本地"配置文件(覆盖主配置的内容)。

应用程序模板还有一个"init"命令,允许您切换。

基本上,您将整个environments-文件夹添加到VCS中,但忽略了这些文件的最终位置(如Ankit所述)。通过这种方式,您可以将VCS中所有不同的环境相关配置放在一起。

请参阅此处了解更多信息,并在此查看此文件夹的外观示例。

另一个简单的解决方案:

文件index.php(进入VCS repo):

<?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 repo包含所有所需文件,并且可以在不进行任何手动修改的情况下进行部署。

您有权访问设置虚拟主机的配置文件吗?如果是,您可以在</Directory></VirtualHost> 之间添加setEnv YII_DEBUG "true"

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

只需在.gitignore

中添加/web/index.phpYii2与composer合作。一个问题是如何处理composer.lock

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

gitignore的最后几行是:

 # exclude composer.lock from versioning 
 composer.lock