【问题标题】:AWS Elastic Beanstalk RDS_DB_NAME environment variable is ignored (Rails 5)AWS Elastic Beanstalk RDS_DB_NAME 环境变量被忽略 (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 中。
  • 使用双引号,例如:

标签: ruby-on-rails postgresql environment-variables amazon-rds amazon-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数据库。我认为没有理由手动创建它
猜你喜欢
  • 2015-08-05
  • 2016-12-10
  • 2018-04-27
  • 2012-12-13
  • 2017-02-28
  • 1970-01-01
  • 2016-03-25
  • 2018-05-02
  • 2021-02-07
相关资源
最近更新 更多