Yii2环境文件夹的重点

时间:2014-01-23 10:43:39

标签: php yii yii2

我正在努力研究环境文件夹的重点。

最初我有一个想法,你可以将网络服务器指向dev文件夹中的不同prodenvironment文件夹,但在读完之后我意识到情况并非如此

在Yii 1中,你可以通过多个index.php来解决这个问题,即:

  • index.php
  • index-local.php

所以问题是这个新环境结构实际上给我带来的好处是什么?

5 个答案:

答案 0 :(得分:6)

我发现环境非常有用,可以让我为多个客户端项目(基于Yii App Advanced)保留一个公共代码库,并为每个特定客户端设置不同的环境,保持他们的自定义代码私密和分离。

为此,我将环境文件夹存储在与其余代码单独的git仓库中,并在客户端/项目的基础上下拉相关文件夹。

这让我可以为所有项目使用基本公共代码,并为特定客户端或项目添加/覆盖任何文件,同时仍允许单独的dev / prod配置设置。如果客户也使用其他开发人员,他们也可以满足。这样,我选择的公共代码只会在客户端之间共享,自定义代码将保密。

我还将composer.json文件移动到环境文件夹中,这样我就可以为每个客户端/项目提供不同的扩展名,同时保留这些扩展名。

init命令可以是一个非常强大的工具,您不必将自己局限于核心开发人员提供的模板。

如果您不需要环境,请不要使用它们,但我向您保证,有些人会发现它非常有用。

答案 1 :(得分:0)

WIP中的Yii2文档,但您应该阅读:

https://github.com/yiisoft/yii2/blob/master/docs/guide/apps-advanced.md#configuration-and-environments

您需要使用yii init命令在这些环境之间切换。

编辑

这种新的环境功能不仅仅是使用不同的配置文件。您可以使用不同的文件夹结构,不同的输入脚本......等等

Personnaly我不会使用这个功能,我不需要它(我将使用与Yii 1不同的入口脚本),但我认为这不是无用的。

答案 2 :(得分:0)

我认为你没有得到Yii2中引入环境的真正目的。

我将尝试从开发人员的角度解释在一个示例中向yii添加环境的主要目的是什么,并希望您真的很感激它的实用性。

让我们假设您是一个开发人员团队(例如5-7人),致力于在Yii中实施的中型到大型项目。为了有效地处理该项目,您的团队决定使用一些CVS或SVN(例如GIT),并将项目的所有文件保存在云中,以供整个团队使用。这是事实上的标准,在团队中的大中型项目中工作,没有人会抵制这是唯一舒适和简单的方式。

好的,现在让我们假设您使用Yii 1.x或Yii2与不同的入口脚本的方法区分本地(开发)和生产环境以连接到db或设置一些其他特定于环境的配置。一切都很好,工作正常。但假设您的团队成员在项目上实现了一些新功能,并且您检查了存储库以使用更新版本,并且您突然发现您的本地配置文件(在本例中为带有配置的条目脚本)被其他团队成员的文件覆盖了对存储库的更改(因为你们每个人都在使用你的本地机器数据库与其他数据库名称或操作系统,或配置,或者只是因为你的团队使用一个本地开发服务器数据库,但你正在度假,不能使用除本地之外的任何东西机)。

因此,一般来说,Yii2环境为使用不同的环境增加了更多的灵活性,每个环境都有自己的特定配置,同时在大中型项目的团队中使用一般(常见)配置,因此为什么在高级应用程序中给出了指南中的示例项目

当然,您可以使用某些解决方案或.gitignore克服上述所有内容,默认情况下使用它来克服Yii2中所述的环境问题。但是:

  1. 如果一切都已经完成,为什么还要打扰?
    1. 这只是Yii2环境有用的一个小例子。更多取决于项目和你的想象力。
    2. 整体Yii2是很棒的产品。它不仅为已经很好的框架增加了许多新功能,而且它比Yii 1.x更强大和灵活(尽管Yii 1.x已经非常强大了。)

      至于Laravel或任何其他PHP框架,它真的取决于...每个人都会找到他/她自己的最爱。

答案 3 :(得分:0)

对于那些厌倦了复制文件的人,我创建了一个有用的脚本,您可以在后台运行以保持文件在您的开发环境中保持同步:

文件sync-env-files.sh

#!/bin/bash

ENVIRONMENT_DIR="/var/www/example.com/environments/dev/"
DIR="/var/www/example.com/"

while [ true ]; do
    for envFile in `find $ENVIRONMENT_DIR -type f`
    do
        file=${envFile/$ENVIRONMENT_DIR/$DIR}
        if [ `stat -c "%Y" $file` -gt `stat -c "%Y" $envFile` ]; then
            #echo "copying modified file $file to $envFile"
            /bin/cp -f $file $envFile
        fi
    done
    sleep 2
done

然后在后台运行脚本或使用flock

添加到cron
nohup server/sync-env-files.sh >/dev/null 2>&1 &

答案 4 :(得分:0)

我想提及@AngelCoding,因为这个问题仍然可以看到,我现在使用environments文件夹很多,并且明确地看到它的重点。

我在任何开源项目中做的第一件事就是在GitHub上为代码库创建一个项目,然后在Bitbucket上为另一个私有创建一个项目,换句话说就是environments文件夹。

拥有此文件夹使我更容易将配置分离到私有存储库。

因此environments文件夹有很多用途,并且真正有助于分离配置,以便更容易使用,即使它最初看起来不像。