我正在尝试解决环境文件夹的意义所在。
最初我的想法是,您可以将网络服务器指向文件夹中的不同文件夹dev
,但在阅读了一下之后,我意识到情况并非如此。prod
environment
在 Yii 1 中,您只需拥有多个index.php
ie 即可解决此问题:
index.php
index-local.php
所以问题是这种新的环境结构实际上给我带来了什么好处而不是旧的方式?
我发现环境非常有用,可以让我为多个客户端项目(基于 Yii App Advanced)保留一个公共代码库,并为每个特定客户端设置不同的环境,保持他们的自定义代码私有和独立。
为此,我将环境文件夹与其余代码存储在一个单独的 git 存储库中,并在客户端/项目的基础上拉下相关文件夹。
这让我可以为所有项目使用基本通用代码,并为特定客户端或项目添加/覆盖任何文件,同时仍然允许单独的 dev/prod 配置设置。如果客户也使用其他开发人员,他们也会得到满足。这样,只有我选择的通用代码将在客户端之间共享,而自定义代码将保持私有。
我还将 composer.json 文件移到了环境文件夹中,这样我就可以为每个客户端/项目引入不同的扩展名,同时保持这些扩展名是私有的。
该 init 命令可以是一个非常强大的工具,您不必局限于核心开发人员提供的模板。
如果您不需要环境,请不要使用它们,但我向您保证,有些人会发现它非常有用。
WIP 中的 Yii2 文档,但您应该阅读以下内容:
您需要使用 yiiinit
命令在这些环境之间切换。
编辑:
这个新的环境特性不仅仅是使用不同的配置文件。您可以使用不同的文件夹结构,不同的入口脚本...等
我个人不会使用这个功能,我不需要它(我将使用与 Yii 1 不同的入口脚本),但我认为这不是无用的。
我认为您没有了解 Yii2 中引入的环境的真正目的。
我将尝试从开发人员的角度通过一个示例来解释向 yii 添加环境的主要目的是什么,并希望您能真正体会到它的用处。
假设您是一个开发人员团队(例如 5-7 人),在 Yii 中实现中型到大型项目。为了有效地处理该项目,您的团队决定使用一些 CVS 或 SVN(例如 GIT)并将项目的所有文件保存在整个团队的云存储库中。在团队中处理大中型项目时,这是事实上的标准,没有人会拒绝这是唯一舒适和简单的方法。
好的,现在让我们假设您使用 Yii 1.x 或 Yii2 以及不同入口脚本的方法来区分本地(开发)和生产环境以连接到数据库或设置一些其他环境特定的配置。一切正常并且工作正常。但是假设您的团队成员在项目中实施了一些新的东西,并且您检查存储库以处理更新的版本,并且您突然发现您的本地配置文件(在这种情况下是带有配置的入口脚本)被其他团队成员的文件所覆盖对存储库的更改(因为你们每个人都在使用具有其他数据库名称或操作系统或配置的本地计算机数据库,或者仅仅因为您的团队使用一个本地开发服务器数据库,但您正在度假,除了您的本地数据库之外不能使用任何东西机器)。
所以一般来说,Yii2 环境增加了使用不同环境的灵活性,每个环境都有自己的特定配置,同时在中型到大型项目的团队中工作时也使用通用(通用)配置,因此为什么指南中的示例是在高级应用程序项目中给出的。
当然,您可以通过一些解决方案或 .gitignore 来克服上述所有问题,默认情况下使用 .gitignore 来克服 Yii2 中提到的环境问题。但:
和
总的来说 Yii2 是很棒的产品。它不仅为已经很棒的框架添加了许多新特性,而且比 Yii 1.x 更加健壮和灵活(尽管 Yii 1.x 已经非常健壮了)。
至于 Laravel 或任何其他 PHP 框架,这真的取决于......每个人都会找到他/她自己的最爱。
对于那些厌倦了复制文件的人,我创建了一个有用的脚本,您可以在后台运行该脚本以使文件在您的开发环境中保持同步:
文件同步-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 &
除了@AngelCoding,我还想提一下,因为这个问题仍然被看到,我environments
现在使用了很多文件夹,并且肯定看到了它的意义。
在任何开源项目中,我做的第一件事就是在 GitHub 上为代码库创建一个项目,然后在 Bitbucket 上创建另一个私有项目,用于配置,也就是environments
文件夹。
拥有这个文件夹让我更容易将我的配置分离到一个私有存储库中。
所以该environments
文件夹有很多用途,并且确实有助于分离配置以便于使用,即使它最初看起来并不像它。