我的php容器上有以下环境,如下所示:
DATABASE_URL:mysql://root:${MYSQL_ROOT_PASSWORD}@db:3306/${MYSQL_DATABASE}
我试图在容器内回显它,并进行数据库迁移。一切都很好。现在我在symfony上的.env文件中使用它,如下所示:
DATABASE_URL=${DATABASE_URL}
当我尝试登录时,该应用说:
由于系统问题,无法处理身份验证请求。
当我尝试手动将所有内容放在.env DATABASE_URL上时,一切都很好。
我怀疑当我尝试使用容器的ENV时,它无法正确使用。
我的问题是如何使用实际的容器环境变量?
谢谢!
注意:
我在开发环境中。
答案 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
都会将这些键值对作为环境变量写入系统中。如果已经存在,则不需要再次定义它。