我正在构建一个需要在两个git分支上工作的应用程序。对于两个分支,我需要维护两个数据库,每次结帐到另一个分支时,都需要从.env
文件中手动更改数据库。 (env
文件包含在.gitignore
文件中)
有什么方法可以从config
访问env
变量吗?我通过以下方式尝试了此方法:
DB_DATABASE="${config('database.database')}"
但是它不起作用。
注意:我可以通过更改config/database.php
来做到这一点,但由于受到限制,这就是为什么要尝试另一种方法的原因。
答案 0 :(得分:2)
您可以制作.env
的多个版本,而无需修改config/database.php
,只需输入数据库设置即可,而不使用env:
旧:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
新:
'mysql' => [
'driver' => 'mysql',
'host' => '123.123.123.123',
然后,您可以继续在GIT中进行存储,并根据所在的分支简单地应用正确的分支。
答案 1 :(得分:0)
另一种方法是让多个.env.production
文件的文件名中包含分支。
.env.development
.env.<branchname>
别忘了将这些文件添加到您的.gitignore中!
切换分支时,您可以手动将相应的.env
的名称改回{{1}}。
答案 2 :(得分:0)
我为您制定了解决方案。我在我的环境中尝试过它,并且按预期工作。
因此,除了@Bram所说的以外,您还可以创建分支特定的.env
文件。
.env.master
和.env.develop
。将两者都添加到.gitignore
。
然后创建一个git post-checkout
钩子:
vim .git/hooks/post-checkout
具有以下内容:
#!/bin/bash
printf '\npost-checkout hook\n\n'
BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
cp .env.$BRANCH_NAME .env
向文件添加权限:
chmod u+x .git/hooks/post-checkout
现在,当您检出develop
分支时,.env
文件的内容将来自.env.develop
,对于主文件也是如此。除非您要扩展Illuminate\Foundation\Application
文件并更改
protected $environmentFile = '.env';
那样。