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

rob*_*sch 18 php version-control configuration web-deployment yii2

我知道Yii定义并使用常量YII_DEBUGYII_ENV.当然,他们在我的本地机器上设置为'true'和'dev'.这是因为基本的app模板已经在index.php文件中以这种方式准备好了.这个文件告诉我,我应该删除生产模式的那些行,即在生产机器上.那些常量默认设置为'false'和'prod'.这一切都没关系,我明白了.(更多信息可以在定义常量环境常量中找到.)

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

你怎么做呢?你有什么建议?

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

Chl*_*loe 7

这是我的解决方案:

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');
}
Run Code Online (Sandbox Code Playgroud)

同样适用于Heroku,在Heroku上设置Yii2 Advanced


Bli*_*izz 5

Yii2(或至少高级应用程序模板)具有“ environments” 系统。在此文件夹中,您可以存储随环境变化的文件。

这些文件通常是您的引导程序文件(index.php)和“本地”配置文件(覆盖主要配置的内容)。

该应用模板还具有一个“ init”命令,可让您进行切换。

基本上发生的是将整个environments-folder 添加到VCS中,但是忽略了这些文件应该在其中结束的位置(例如已经提到的Ankit)。这样,您可以将所有不同的依赖于环境的配置保持在VCS中彼此相邻。

这里的一个位的更多信息,并在这里为这个文件夹怎么能看一个例子。


rob*_*sch 5

另一个简单的解决

文件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();
Run Code Online (Sandbox Code Playgroud)

文件my-env.php:

<?php

defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
Run Code Online (Sandbox Code Playgroud)

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

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


Pat*_*ski 5

您是否可以访问设置虚拟主机的配置文件?如果是这样你可以setEnv YII_DEBUG "true"</Directory>和之间添加</VirtualHost>


ank*_*itr 2

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

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