我正在尝试设置两个Rails应用程序。我希望他们俩都使用一个MySQL数据库。我的设置是这样的:
使用Elastic Beanstalk我已经设置了两个具有两个不同环境的Rails应用程序。我用MySQL数据库设置的应用程序之一。所以现在我有两个EC2实例 - 一个用于每个rails应用程序和一个RDS MySQL实例。
我在两个EC2实例中设置了安全组,以便能够通过port 3306
连接到MYSQL。
我已将数据库安全组设置为授权两个EC2实例,并且还使用第二个EC2实例的私有IP设置CIDR / IP(配置Beanstallk应用程序时没有设置MySQL数据库的那个)
在两个Rails应用程序中,我设置了database.yml,如:
production:
adapter: mysql2
encoding: utf8
database: <%= ENV['RDS_DB_NAME'] %>
username: <%= ENV['RDS_USERNAME'] %>
password: <%= ENV['RDS_PASSWORD'] %>
host: <%= ENV['RDS_HOSTNAME'] %>
port: <%= ENV['RDS_PORT'] %>
我在第二个实例(没有MySQL DB的实例)上为第一个EC2实例的ENV值分配了生产的ENV值。
我在这里缺少什么?
我还将我的计算机IP地址添加到DB Securty Group,并且我能够使用我用作ENV变量的凭据连接到MySQL DB。
答案 0 :(得分:2)
你可能会错过这个:
socket: /var/lib/mysql/mysql.sock
答案 1 :(得分:0)
问题解决了 - 我在database.yml文件中设置了DB凭据,而不是ENV变量。环境变量被弹性beanstalk上的git aws.push
每次推送覆盖。
答案 2 :(得分:0)
在我的情况下,这是因为我使用了错误的ENV变量名。
您可以通过使用eb ssh
和printenv | grep RDS
连接到您的实例来仔细检查是否已正确设置所有内容,这应该会为您提供类似的内容:
RDS_HOSTNAME=yourhostname.amazonaws.com
RDS_DB_NAME=ebdb
RDS_PASSWORD=yourpassword
RDS_USERNAME=yourusername
RDS_PORT=3306
确保这些内容反映在您的config / database.yml文件中 - 使用<%= ENV['varname'] %>
或通过硬编码。显然,前一种选择是可取的。 :)