默认情况下,Laravel git会忽略包含环境设置和配置的.env文件。
我想有一个本地.env和一个可以提交到我的服务器的生产.env,这样我就不需要手动创建生产设置或触摸.env
文件了并且可以使用push来部署技术。
有人为此得到了任何好的解决方案吗?设计开发人员总是在单个文件中手动创建生产设置似乎是一个奇怪的设计决策,并且不容易在生产和本地设置之间切换。我正在考虑使用git hooks将.production重命名为.env,但这看起来有点矫枉过正,我想检查一下这个功能是不是开箱即用,而且我已经错过了它。
奖励要点解释为什么有三个文件.local.env
,.production.env
和.env
(在两者之间切换)文件是一个坏主意,原始团队避免使用。
我使用的是最新版本的Laravel(5.3)。
答案 0 :(得分:2)
这种设计背后的原因主要是:
Laravel利用Vance Lucas的DotEnv PHP库提供.env
功能,因此您可以在那里以及官方的Laravel文档中阅读更多相关内容:
您的
.env
文件不应提交给您的应用程序源 控制,因为每个开发人员/服务器使用您的应用程序都可以 需要不同的环境配置。如果您正在与团队合作,您可能希望继续包括 与您的申请一起的
.env.example
文件。通过放置持有人 示例配置文件中的值,您的其他开发人员 团队可以清楚地看到需要运行哪些环境变量 你的申请。
来自DotEnv:
.env
文件通常不受版本控制,因为可以 包含敏感的API密钥和密码。一个单独的.env.example
文件 创建时定义了所有必需的环境变量,但是 敏感的,用户自己提供的 开发环境或在其他地方传达给项目 合作者。项目合作者然后独立复制.env.example
文件发送到本地.env
并确保所有设置均为 纠正他们的当地环境,填写秘密密钥或 必要时提供自己的价值观。在这种用法中,.env 应该将文件添加到项目的.gitignore
文件中,以便它可以 永远不会被合作者承诺。这种用法确保了没有 敏感密码或API密钥将在版本控制中 历史因此,安全漏洞和生产的风险较小 永远不必与所有项目协作者共享值。
总之,如果您确定只部署到一个系统并且设置始终相同,并且.env
内没有敏感数据(或者您可以看到每个人都参与其中它),那么你可以继续你的解决方案。
作为一个侧面节点:由于您特别要求设计决策,因此DotEnv显然受到了Twelve-Factor App的启发,该应用程序主张strict separation of config from code等因素。