AWS Elastic Beanstalk RDS_DB_NAME 环境变量被忽略 (Rails 5)

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk RDS_DB_NAME 环境变量被忽略 (Rails 5)【英文标题】:AWS Elastic Beanstalk RDS_DB_NAME environment variable is ignored (Rails 5) 【发布时间】:2019-03-03 02:46:33 【问题描述】:

我一直在使用 Elastic Beanstalk 在 RDS 中创建的 ebdb 数据库。看来 Elastic Beanstalk 控制台中的 RDS_DB_NAME 环境变量可以留空而不影响应用程序的运行:

我重新启动了应用服务器(使用 EB 控制台),但没有任何效果。我注意到当我进入RDS时,数据库名称仍然奇怪地列为ebdb

任何人都可以确认这种行为,并且 - 如果我是正确的 - 我如何切换到 RDS 上的不同数据库? (在我的情况下,我正在测试备份和恢复,并希望我的 Rails 5.2 应用程序暂时指向恢复的数据库。)

FWIW,我有标准的 Rails config/database.yml:

production:
  <<: *default
  database: <%= ENV['RDS_DB_NAME'] %>
  username: <%= ENV['RDS_USERNAME'] %>
  password: <%= ENV['RDS_PASSWORD'] %>
  host: <%= ENV['RDS_HOSTNAME'] %>
  port: <%= ENV['RDS_PORT'] %>

【问题讨论】:

如果我假设 AWS 没有以某种方式缓存环境数据,那么我唯一想到的是您的应用程序没有在生产环境中运行? 谢谢,@MladenIlić。好主意,但我已检查 RACK_ENV 是否设置为“生产”。也许那个变量也没有任何作用! 尝试将RAILS_ENV 设置为production 很遗憾,无法设置数据库的名称。正如 Nezir 下面建议的那样,通过 EB 创建数据库仅用于测试目的。出于生产目的,请直接使用 AWS RDS 创建数据库。然后将 AWS RDS 的元数据作为环境变量存储在 Elastic Beanstalk 中。 使用双引号,例如: 【参考方案1】:

根据用户体验,他在blog 中建议:

不要将 RDS 实例与 Beanstalk 环境关联 Elastic Beanstalk 允许您在创建新环境时关联 RDS 实例。但是,我建议您不要在生产环境中这样做。

首先,这里有一些这样做的好处:

Elastic Beanstalk 会自动创建 RDS 实例以及正确配置的安全组。 环境变量被注入到您的所有 EC2 实例中(如 RDS_HOSTNAME、RDS_USERNAME……)。 但是,对我来说,有一个很大的缺点是它无法在生产中使用:现在,RDS 与您的环境相关联。这意味着,如果出于某种原因您需要重建环境(例如更新 Elastic Beanstalk AMI),您将陷入困境,因为 Elastic Beanstalk 将删除任何关联的资源(例如您的 RDS 实例)。然后,您需要创建 RDS 实例的快照,并从中重新创建一个新实例。这将导致一些停机时间。

在我看来,最好的方法是单独创建 RDS 实例,并手动将 RDS 环境变量注入到新创建的环境中,例如使用 Elastic Beanstalk GUI 工具。这更灵活!

请转到博客链接并在blog post下方的评论中阅读有关体验的更多信息。

【讨论】:

谢谢,@Nezir。是的,我昨天也阅读了该博客,并得出结论认为,对于 5 年以上(?)岁的产品,EB 并不像我希望的那样强大。 您可以通过转到RDS仪表板中的设置并保护它不被删除来防止删除RDS数据库。我认为没有理由手动创建它

以上是关于AWS Elastic Beanstalk RDS_DB_NAME 环境变量被忽略 (Rails 5)的主要内容,如果未能解决你的问题,请参考以下文章

在 AWS Elastic Beanstalk 和 EKS 上部署了一个 laravel 应用程序 相同的数据库 RDS 为啥在 Elastic Beanstalk 中获得快速响应

一个 AWS 账户中的 Elastic Beanstalk 能否与另一个 AWS 账户中的 RDS 通信?

无法在 AWS Elastic Beanstalk 上创建新的 RDS 数据库

使用 RDS 建立数据库连接 AWS Elastic Beanstalk 时出错

Django AWS RDS 环境变量未在 Elastic Beanstalk 中设置

Laravel 7- AWS - 运行“php artisan migrate”时出现 Elastic Beanstalk + RDS 错误