我知道Yii定义并使用常量 YII_DEBUG 和 YII_ENV。当然,它们在我的本地机器上设置为'true'和'dev'。这是因为基本的应用程序模板已在index.php文件中以这种方式进行了准备。这个文件告诉我,我应该删除生产模式的那些行,即在生产机器上。那些常量默认设置为'false'和'prod'。这一切都没关系,我明白了。 (可在Defining Constants和Environment Constants上找到更多信息。)
我的问题:当VCS中包含index.php时,如何才能最好地处理这些常量?在一个环境中它们应该存在,而在另一个环境中则不存在。当然,它也可以是一台试验机。我有哪些选择?我认为这也是部署方法的问题。目前,我只是通过Git推送到生产机器,IMO原始部署是什么......
你是怎么做到的?你有什么建议?
编辑:实际上,处理params文件也是同样的问题。
答案 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中所有不同的依赖于环境的配置保持在一起。
答案 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