没有 .env 文件的命令行生产中的 Laravel 和环境变量
Posted
技术标签:
【中文标题】没有 .env 文件的命令行生产中的 Laravel 和环境变量【英文标题】:Laravel and environment variables in command line production without .env file 【发布时间】:2015-09-04 22:49:45 【问题描述】:当我升级到 Laravel 5 时,我开始使用 env 系统,在该系统中,我将所有配置都设置在该文件的根目录中。
.env
DB_HOST=x.x.x.x.x
DB_USERNAME
...
这个文件不是我的 repo 的一部分,当我部署时,我将相同的变量设置到我的系统环境变量中(在此处使用 amazon beanstalk),因此无需 .env 文件即可访问它们.
所以一切正常,但现在当我在生产环境中的脚本中使用命令行时,这些系统环境变量似乎无法在命令行中访问。但是,当 php 通过 Web 服务器提供服务时,它们可以访问。
我发现如果我复制添加回这个 .env 文件,那么它可以在命令行中工作,但这就是我感到困惑的原因,我认为这个系统是为了防止将敏感信息提交到 repo,现在看来我必须这样做这样我就可以在生产中使用我的 php artisan migrate 和其他命令。
我错过了什么吗?有没有办法在命令行中获取可用的系统环境变量,还是我必须以某种方式在生产中动态创建该 .env 文件?
【问题讨论】:
【参考方案1】:我一直认为 .env 文件只是设置服务器的一部分。 .env 文件会被 git 忽略,因此一旦设置好,您可以推送/拉取您想要的内容,它将不理会 .env 文件。至少到目前为止我是这样做的。
【讨论】:
我在服务器上部署系统时的一个步骤是在生产环境中运行 php artisan migrate。这是一个问题,因为我的 config/database.php 正在以这种格式使用 env('DB_HOST') 并且在生产中通过命令行运行时为 NULL。我确实在我的系统环境中设置了这些,因此它们在通过 php web 服务器运行时可以工作,但这并不能解决我的问题.. 那时我可能不完全理解您的意思。对于部署到的每台服务器,您应该有一个不同的 .env 文件。这样做的原因是您的开发服务器上的环境设置可能与生产服务器上的不同。如果将 .env 文件复制到生产服务器时它工作正常,那么就保持这种状态,因为没有任何问题. 哈哈...我认为我们在绕圈子 :-) .env 不是回购的一部分。 .env 文件应该在服务器上设置好 repo 之后创建,因为 .gitignore 文件会忽略 .env 文件,所以它根本不会影响你的 repo。以上是关于没有 .env 文件的命令行生产中的 Laravel 和环境变量的主要内容,如果未能解决你的问题,请参考以下文章
Laravel env() 或 config() 在命令行上获取环境变量
安装 react native - 命令行界面(环境:节点:没有这样的文件或目录)
vue如何按照环境打包项目?如何在vue文件中使用process.env?