从环境访问配置变量

时间:2019-06-25 06:43:30

标签: laravel git environment-variables config

我正在构建一个需要在两个git分支上工作的应用程序。对于两个分支,我需要维护两个数据库,每次结帐到另一个分支时,都需要从.env文件中手动更改数据库。 (env文件包含在.gitignore文件中)

有什么方法可以从config访问env变量吗?我通过以下方式尝试了此方法:

DB_DATABASE="${config('database.database')}"

但是它不起作用。

注意:我可以通过更改config/database.php来做到这一点,但由于受到限制,这就是为什么要尝试另一种方法的原因。

3 个答案:

答案 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';

那样。