dotenv在生产时需要.env文件

桑德·维瑟(Sander Visser)

我正在使用dotenv for PHP来管理环境设置(不是lavarel,但我标记了它,因为lavarel也使用dotenv)

我已将.env从代码库中排除,并为所有其他协作者添加了.env.example

在dotenv的github页面上:

phpdotenv用于开发环境,通常不应在生产中使用。在生产中,应设置实际的环境变量,以便在每次请求时都不会加载.env文件。这可以通过使用Vagrant,chef或Puppet等工具的自动部署过程来实现,也可以通过Pagodabox和Heroku等云主机手动设置。

我不明白的是,我得到以下异常:

PHP Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Dotenv: Environment file .env not found or not readable.

这与文档中所说的“应设置实际的环境变量,以免在每次请求时加载.env文件的开销”相矛盾。

所以问题是,是否有任何原因导致dotenv抛出该异常和/或我丢失了某些东西?首先,行为与其他dotenv库(红宝石)相比有所不同

我可以轻松解决此问题,但不是很好的解决方案:

if(getenv('APPLICATION_ENV') !== 'production') { /* or staging */
    $dotenv = new Dotenv\Dotenv(__DIR__);
    $dotenv->load();
}

我认为这是最好的解决方案,但我认为dotenv应该处理这个问题。

$dotenv = new Dotenv\Dotenv(__DIR__);
//Check if file exists the same way as dotenv does it
//See classes DotEnv\DotEnv and DotEnv\Loader
//$filePath = $dotenv->getFilePath(__DIR__); 
//This method is protected so extract code from method (see below)

$filePath = rtrim(__DIR__, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR . '.env';
//both calls are cached so (almost) no performance loss
if(is_file($filePath) && is_readable($filePath)) {
    $dotenv->load();
}
阿力克

Dotenv是基于一种想法而构建的,即仅在开发环境中使用。因此,它总是希望.env文件存在。

您不喜欢的解决方案是使用Dotenv的推荐方法。看来,在不久的将来不会改变项目的问题追踪器中的相关讨论:https : //github.com/vlucas/phpdotenv/issues/63#issuecomment-74561880

请注意,Mark为生产/暂存环境提供了一种很好的方法,该方法跳过文件加载,但不进行验证

$dotenv = new Dotenv\Dotenv();
if(getenv('APP_ENV') === 'development') {
    $dotenv->load(__DIR__);
}
$dotenv->required('OTHER_VAR');

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails 文件在生产中仍然缓存 - 有时

来自分类Dev

在.env(dotenv)文件中使用PHP函数

来自分类Dev

Ruby dotenv gem 未加载 .env 文件

来自分类Dev

在Heroku的生产环境中使用ENV文件

来自分类Dev

启动Shell时使用python-dotenv在Django应用中运行.env文件

来自分类Dev

使用来自单独配置文件的 env 变量启动烧瓶仍然在生产中启动

来自分类Dev

终端问题 dotenv:目录中的源“.env”文件?

来自分类Dev

WCF是否需要在生产时发布元数据?

来自分类Dev

在生产中禁用pyc文件

来自分类Dev

在生产环境中使用查询字符串将文件上传到GCS时出现404错误

来自分类Dev

仅当配置文件显示不在生产模式时,才发出警报或执行脚本

来自分类Dev

Laravel 5.2 {{env('APP_ENV')}}在生产中不起作用

来自分类Dev

当运行没有.env文件的项目时,当DotEnv组件尝试读取它时,bootstrap.php会引发致命错误。

来自分类Dev

如何在生产中发布Django静态文件

来自分类Dev

合并的文件未包含在生产中

来自分类Dev

在生产中从CDN而非Flask服务静态文件

来自分类Dev

NuxtJS在生产中更改资产文件名

来自分类Dev

Django正在生产中下载/上传文件

来自分类Dev

如何在生产模式下发布角度文件?

来自分类Dev

Django-在生产中提供MEDIA /上传的文件

来自分类Dev

ZFS *文件*支持zpool的快照...在生产中安全吗?

来自分类Dev

字体文件未在生产 Ruby on Rails 中编译

来自分类Dev

当您可以在.js文件中进行设置时,为什么还要使用.env文件?

来自分类Dev

没有.env文件的命令行生产中的Laravel和环境变量

来自分类Dev

在生产环境中相当于Mix.env / 0?

来自分类Dev

env变量在生产环境中未定义(与Heroku一起部署的React App)

来自分类Dev

我是否需要在React项目中将.env文件添加到版本控制中?

来自分类Dev

Rails 4,Capistrano 3和Dotenv-如何使用服务器端.env文件进行部署

来自分类Dev

当我使用env文件时,我在读取vars时不确定

Related 相关文章

  1. 1

    Rails 文件在生产中仍然缓存 - 有时

  2. 2

    在.env(dotenv)文件中使用PHP函数

  3. 3

    Ruby dotenv gem 未加载 .env 文件

  4. 4

    在Heroku的生产环境中使用ENV文件

  5. 5

    启动Shell时使用python-dotenv在Django应用中运行.env文件

  6. 6

    使用来自单独配置文件的 env 变量启动烧瓶仍然在生产中启动

  7. 7

    终端问题 dotenv:目录中的源“.env”文件?

  8. 8

    WCF是否需要在生产时发布元数据?

  9. 9

    在生产中禁用pyc文件

  10. 10

    在生产环境中使用查询字符串将文件上传到GCS时出现404错误

  11. 11

    仅当配置文件显示不在生产模式时,才发出警报或执行脚本

  12. 12

    Laravel 5.2 {{env('APP_ENV')}}在生产中不起作用

  13. 13

    当运行没有.env文件的项目时,当DotEnv组件尝试读取它时,bootstrap.php会引发致命错误。

  14. 14

    如何在生产中发布Django静态文件

  15. 15

    合并的文件未包含在生产中

  16. 16

    在生产中从CDN而非Flask服务静态文件

  17. 17

    NuxtJS在生产中更改资产文件名

  18. 18

    Django正在生产中下载/上传文件

  19. 19

    如何在生产模式下发布角度文件?

  20. 20

    Django-在生产中提供MEDIA /上传的文件

  21. 21

    ZFS *文件*支持zpool的快照...在生产中安全吗?

  22. 22

    字体文件未在生产 Ruby on Rails 中编译

  23. 23

    当您可以在.js文件中进行设置时,为什么还要使用.env文件?

  24. 24

    没有.env文件的命令行生产中的Laravel和环境变量

  25. 25

    在生产环境中相当于Mix.env / 0?

  26. 26

    env变量在生产环境中未定义(与Heroku一起部署的React App)

  27. 27

    我是否需要在React项目中将.env文件添加到版本控制中?

  28. 28

    Rails 4,Capistrano 3和Dotenv-如何使用服务器端.env文件进行部署

  29. 29

    当我使用env文件时,我在读取vars时不确定

热门标签

归档