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_PASSWORDRDS_DB_NAME 如果我运行export,我看不到RDS_PASSWORDRDS_DB_NAME

以上是关于AWS EB 未定义 RDS_HOSTNAME,数据库主机数组为空的主要内容,如果未能解决你的问题,请参考以下文章

我在 aws 中使用“eb deploy”进行部署,但出现以下错误

eb init - ElasticBeanstalk 应用程序环境未显示在选项列表中

AWS ElasticBeanstalk .ebextensions 未执行

将敏感环境变量包括到 AWS EB Django 应用程序

AWS数据库错误php mysql

安装 gems 部署失败 - AWS Elastic Beanstalk