AWS EB 未定义 RDS_HOSTNAME,数据库主机数组为空
Posted
技术标签:
【中文标题】AWS EB 未定义 RDS_HOSTNAME,数据库主机数组为空【英文标题】:AWS EB undefined RDS_HOSTNAME with Database hosts array empty 【发布时间】:2021-04-05 10:51:14 【问题描述】:目前在一个使用带有 RDS 的 AWS EB 的 Laravel 项目中。
当我跑步时
php artisan migrate --seed
然后我得到
PHP 注意:未定义索引:/var/app/current/config/database.php 第 5 行中的 RDS_HOSTNAME
PHP 注意:未定义索引:/var/app/current/config/database.php 第 6 行中的 RDS_USERNAME
PHP 注意:未定义索引:/var/app/current/config/database.php 第 7 行中的 RDS_PASSWORD
PHP 通知:未定义索引:/var/app/current/config/database.php 第 8 行中的 RDS_DB_NAME
和
数据库主机数组为空。 (SQL: 选择 * 来自 information_schema.tables 其中 table_schema = ?和表名 = 迁移和 table_type = 'BASE TABLE')
我没有使用 .env 文件,而是在 EB 配置中定义这些变量,例如
还有我的 ./config/database.php 文件
测试了将变量的前缀更改为 RDS_ 而不是 EB 中的 DB_ 但这并没有解决问题。
【问题讨论】:
【参考方案1】:根据 Elastic Beanstalk 文档here:
注意:环境属性不会自动导出到 shell,即使它们存在于实例中。反而, 环境属性可通过以下方式提供给应用程序 它运行的堆栈,取决于您使用的平台。
因此,Elastic Beanstalk 会将这些环境变量传递给 Apache HTTP 服务器进程,而不是您运行 php
命令的 Linux shell。
根据文档here,您需要使用get-config 脚本将这些环境变量值拉入您的shell。
所以你需要为所有人这样做
/opt/elasticbeanstalk/bin/get-config environment -k RDS_USERNAME
这将打印 RDS_USERNAME 的值。然后将其导出以在其他命令中使用
export RDS_USERNAME="value"
为所有人执行此操作 - RDS_HOSTNAME、RDS_USERNAME、RDS_PASSWORD 和 RDS_DB_NAME。然后如果你运行
export
您必须能够看到 RDS_HOSTNAME、RDS_USERNAME、RDS_PASSWORD 和 RDS_DB_NAME 以及前面的相应值。
一旦完成并运行
php artisan migrate --seed
然后你会得到预期的结果
【讨论】:
Mark B 如果我运行/opt/elasticbeanstalk/bin/get-config environment
我可以看到带有属性列表的对象并且运行php artisan migrate --seed
仍然让我遇到与以前相同的错误。我以前见过人们通过在他们的应用程序的根目录中创建一个 .ebextensions 文件夹并在那里有这个命令(一旦运行然后需要删除 - 所以理想情况下我可以在没有那个文件夹的情况下运行)
我刚刚使用 .ebextensions 文件夹(如 explained here)进行了测试,但实例随后进入了降级状态。所以理想情况下,我会通过 SSH 进入实例并在需要时运行命令。
只运行get-config
只会将值打印到控制台。您仍然需要在 shell 的环境变量中设置它们。
MarkB 如果我在 shell echo $RDS_HOSTNAME"
中运行(或者,而不是 HOSTNAME - USERNAME、PASSWORD 和 DB_NAME),那么我可以看到每个相应的值。然而,当我运行命令时,现在它说未定义的是RDS_PASSWORD
和RDS_DB_NAME
。
如果我运行export
,我看不到RDS_PASSWORD
和RDS_DB_NAME
。以上是关于AWS EB 未定义 RDS_HOSTNAME,数据库主机数组为空的主要内容,如果未能解决你的问题,请参考以下文章
我在 aws 中使用“eb deploy”进行部署,但出现以下错误
eb init - ElasticBeanstalk 应用程序环境未显示在选项列表中