如何在DATABASE_URL Symfony上使用Container的ENV

时间:2018-03-09 07:08:39

标签: symfony docker

我的php容器上有以下环境,如下所示:

DATABASE_URL:mysql://root:${MYSQL_ROOT_PASSWORD}@db:3306/${MYSQL_DATABASE}

我试图在容器内回显它,并进行数据库迁移。一切都很好。现在我在symfony上的.env文件中使用它,如下所示:

DATABASE_URL=${DATABASE_URL}

当我尝试登录时,该应用说:

  

由于系统问题,无法处理身份验证请求。

当我尝试手动将所有内容放在.env DATABASE_URL上时,一切都很好。

我怀疑当我尝试使用容器的ENV时,它无法正确使用。

我的问题是如何使用实际的容器环境变量?

谢谢!

注意:

我在开发环境中。

2 个答案:

答案 0 :(得分:2)

请注意,当您从cli运行php并且当它由Web服务器运行时(当您从浏览器访问它时),存在单独的环境。

例如,在nginx-fpm的情况下,当您调用printenv时,nginx运行的php脚本中无法通过运行getenv()在cli中看到的变量。为了设置php fpm的环境变量,你可以编辑php-fpm.conf

....
[www]
env[DATABASE_URL] = 'mysql://...'
....

如果你使用的是另一个网络服务器,你应该知道如何在php脚本中提供env vars。

DATABASE_URL=${DATABASE_URL} .env个文件中的DATABASE_URL无法正常工作,因为没有为{/ p>设置VAR=${VAR}

希望这有帮助。

P.S。请注意,此构造VAR没有任何结果,因为DotEnv不会覆盖.env,因为它已经定义。

P.P.S。建议您使用WITH RandomCaseNum AS ( SELECT [Date/Time Closed] ,[Case Owner] ,[Case Number] ,ROW_NUMBER() Over (Partition By [Case Owner] Order By NewId()) Random FROM [SF].[dbo].[All] WHERE YEAR([Date/Time Closed]) = YEAR(GETDATE()) AND DATEPART(WW, [Date/Time Closed]) = DATEPART(WW, GETDATE()) -1 ) SELECT [Case Owner] ,[Case Number] ,Random FROM RandomCaseNum WHERE Random <= 5 文件作为您的开发服务器和&#34;真实&#34; env / staging中的变量。

答案 1 :(得分:1)

我对symfony不太熟悉,但似乎symfony永远不会覆盖现有的环境变量。 (参考:https://symfony.com/doc/current/components/dotenv.html

如果删除.env文件中的该行,该怎么办?由于DATABASE_URL已经是一个环境变量,因此即使您没有在getenv('DATABASE_URL')中定义它,在symfony中调用.env也应该返回正确的值。所有dotenv都会将这些键值对作为环境变量写入系统中。如果已经存在,则不需要再次定义它。