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

时间:2015-03-04 10:37:33

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

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

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

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

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

6 个答案:

答案 0 :(得分: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');
}

对于Heroku,Setup Yii2 Advanced on Heroku

答案 1 :(得分: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();

档案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包含所有所需文件,无需任何手动修改即可部署。

答案 2 :(得分:5)

您是否可以访问设置虚拟主机的配置文件?如果是这样,您只需在setEnv YII_DEBUG "true"</Directory>

之间添加</VirtualHost>即可

答案 3 :(得分:4)

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

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

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

基本上发生的事情是你将整个environments - 文件夹添加到你的VCS中,但是你忽略了这些文件应该结束的位置(比如Ankit已经说过)。这样,您可以将VCS中所有不同的依赖于环境的配置保持在一起。

有关详细信息,请参阅here;有关此文件夹的外观示例,请参阅here

答案 4 :(得分:2)

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

只需在 .gitignore

中添加/web/index.php即可

答案 5 :(得分:0)

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

在我的Yii2制作网站中,我将composer.lock添加到.gitignore,以便根据生产问题决定作曲家更新,并在composer.lock期间保持git pull的制作版本不受影响}用于更新生产站点。

我最后一行.gitignore是:

 # exclude composer.lock from versioning 
 composer.lock
相关问题