0

我正在尝试设置两个 Rails 应用程序。我希望他们两个都使用一个 MySQL 数据库。我的设置是这样的:

使用 Elastic Beanstalk,我设置了两个具有两个不同环境的 Rails 应用程序。我使用 MySQL 数据库设置的应用程序之一。所以现在我有两个 EC2 实例 - 每个 Rails 应用一个和一个 RDS MySQL 实例。

我在两个 EC2 实例中设置了安全组,以便能够通过port 3306.

我已经设置了数据库安全组来授权两个 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'] %>

我使用来自第一个 EC2 实例的 ENV 值为第二个实例(没有 MySQL 数据库的那个)上的生产分配了 ENV 值。

我在这里想念什么?

我还将我的计算机 IP 地址添加到 DB 安全组,并且我能够使用我用作 ENV 变量的凭据连接到 MySQL 数据库。

4

3 回答 3

2

你可能会错过这个:

socket: /var/lib/mysql/mysql.sock
于 2013-04-23T16:30:47.440 回答
0

问题已解决 - 我在 database.yml 文件中设置了数据库凭据,而不是 ENV 变量。每次使用git aws.push弹性豆茎时,环境变量都会被覆盖。

于 2013-04-26T22:07:55.683 回答
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'] %>或硬编码它们。显然,前一种选择更可取。:)

于 2016-05-09T14:44:25.397 回答