【发布时间】:2021-02-21 16:56:37
【问题描述】:
我很难将示例 Rails 6 应用程序启动到 Elastic Beanstalk。对于上下文,我正在遵循这些说明
我已按照这些说明操作 tee,但仍然无法连接到我已配置的 rds 数据库。我不断收到以下错误:
PG::ConnectionBad: 无法连接到服务器:没有这样的文件或目录 服务器是否在本地运行并接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接?
每当我尝试运行 RAILS_ENV=production rails db:migrate 或任何其他 rake 任务时,我都会不断收到该错误。
在我的 AWS 控制台上,在 Configuration 和 Software 下,我有以下环境变量:
另外,在我的 database.yml 文件中,我列出了 rds 配置的变量。
production:
adapter: postgresql
database: <%= ENV['RDS_DB_NAME'] %>
username: <%= ENV['RDS_USERNAME'] %>
password: <%= ENV['RDS_PASSWORD'] %>
host: <%= ENV['RDS_HOSTNAME'] %>
port: <%= ENV['RDS_PORT'] %>
我已按照文档中的说明映射了我的值,并确定它们是正确的。
最后,我 ssh 进入了我的 beanstalk 配置的 ec2 实例并执行了以下命令:
psql -U username -p 5432 -h examplehost.rds.amazonaws.com -d ebdb
提供了密码并且能够连接。我真的束手无策,我花了太多时间试图诊断这一点,而且我的想法已经不多了。我不知道下一步该去哪里寻找有关如何解决此问题的想法。我已经阅读了太多堆栈溢出问题和博客,以至于我头晕目眩。如果有人对如何解决此问题有任何想法,我将不胜感激。
---更新---- 我在弹性 beanstalk 控制台上创建了一个新的环境变量。
ENV['DATABASE_URL'] = postgres://YourUserName:YourPassword@YourHostname:5432/YourDatabaseName
我进行了必要的配置,上传了我的 .zip 文件,但与数据库的连接失败。
---- 更新-----
printenv 不显示 beanstalk 提供的变量,但是此命令可以显示 sudo /opt/elasticbeanstalk/bin/get-config environment。
【问题讨论】:
-
您可以从您的应用程序中启动 Rails 控制台吗?
cd /var/app/current然后启动控制台? -
rails 服务器和机架环境是否设置为生产模式?
-
谢谢大家的回复。是的,这两个变量都设置为生产,我可以访问 rails 控制台。但是,如果我尝试进行任何类型的查询或活动记录语句,我会收到
no implicit conversion of nil into String (TypeError)。通过在database.yml中对我部署的rails 应用程序上的生产值进行硬编码,我能够使其暂时工作。这让我觉得应用程序无法以某种方式读取 RDS 环境变量,尽管将它们放在控制台中.. -
哦,很好的侦探工作,但奇怪的是环境变量没有被拾取。在控制台中,您能否再次检查它们是否已设置?
-
目前我还不确定该怎么做。据我所知,它正在吸收所有其他变量。所以我明天要尝试的是创建一个名为
DATABASE_URL的新环境变量并将其设置为这个postgresql 连接字符串。postgres://YourUserName:YourPassword@YourHostname:5432/YourDatabaseName。我将配置我的database.yml以使用它,然后我会看看是否能解决问题。
标签: ruby-on-rails amazon-web-services amazon-elastic-beanstalk amazon-rds