Rails生产控制台无法在AWS Elastic Beanstalk Amazon Linux 2上检索env变量



我一直在尝试访问ec2实例上的生产控制台,作为我的弹性豆茎环境的一部分。我实际上能够访问控制台,但当我查询对象时,例如";Wager.all";,它给了我一个错误:

[root@ip-10-0-1-146config]#bundle exec rails c-e production加载生产环境(Rails 5.2.4.2(irb(主(:001:0>Wager.all追踪(最近一次通话(:PG::ConnectionBad(fe3endauth:未提供密码(

这是我的database.yml文件(生产配置是要查看的(:

default: &default
adapter: postgresql
encoding: UTF-8
host: 'localhost'

pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 10 } %>
test:
<<: *default
development:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
database: <%= ENV['RDS_DB_NAME'] %>
username: <%= ENV['RDS_USERNAME'] %>
password: <%= ENV['RDS_PASSWORD'] %>
host: <%= ENV['RDS_HOSTNAME'] %>
port: <%= ENV['RDS_PORT'] %>
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
database: <%= ENV['RDS_DB_NAME'] %>
username: <%= ENV['RDS_USERNAME'] %>
password: <%= ENV['RDS_PASSWORD'] %>
host: database-1.c76xg56p4vkw.us-east-2.rds.amazonaws.com
port: 5432

以前,我将主机和端口选项设置为环境变量,但由于无法连接到主机,因此失败了。现在我已经硬编码了,它在需要我的密码的部分失败了。我可以通过对所有内容进行硬编码来实现这一点,但我想使用env变量。

尽管我已经在我的弹性豆茎控制台中设置了环境变量,但rails控制台似乎无法检索它们。但是,应用程序似乎在部署期间访问了这些变量,因为它可以连接到我的数据库。

我尝试过的东西:

运行"erb-config/database.yml",查看erb是否可以识别这些值。它为我在<%=%中指定了内容的所有字段返回空值>。因此'密码:<%=ENV['RDS_PASSWORD']'%>将像"password:"一样输出。

我参考了这个AWS文档来建立我的数据库.yml文件

调用了AWS客户支持,我们确认该实例似乎确实了解环境变量。此命令"/opt/elasticbeanstall/bin/get-config-environment"正确输出所有env变量。然而,这位支持助理对rails了解不多,所以他无法进一步帮助我。

ruby 2.5.8p224(2020-03-31修订版67882([x86_64-linux]

我也遇到过这个问题一段时间。事实证明,AmazonLinux2之前的AmazonLinuxAMI平台版本已经将环境变量来源于用户的bash。

您可以通过在.eextensions文件中添加以下内容来恢复此过程并允许自己进入rails控制台:

commands:
setvars:
command: /opt/elasticbeanstalk/bin/get-config environment | jq -r 'to_entries | .[] | "export (.key)="(.value)""' > /etc/profile.d/sh.local
packages:
yum:
jq: []

这将把ENV变量加载到每个用户的bash中。然后,您可以通过运行命令echo $MY_ENV_VARIABLE来调用这些变量(就像在以前的AMI版本中一样(

最新更新