rob*_*sch 18 php version-control configuration web-deployment yii2
我知道Yii定义并使用常量YII_DEBUG和YII_ENV.当然,他们在我的本地机器上设置为'true'和'dev'.这是因为基本的app模板已经在index.php文件中以这种方式准备好了.这个文件告诉我,我应该删除生产模式的那些行,即在生产机器上.那些常量默认设置为'false'和'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');
}
Run Code Online (Sandbox Code Playgroud)
同样适用于Heroku,在Heroku上设置Yii2 Advanced
文件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包含所有必需的文件,无需任何手动修改即可部署.