2013-04-23 36 views
0

我试图设置两个Rails应用程序。我希望他们都使用一个MySQL数据库。我的设置是这样的:在两个EC2实例上使用MySQL数据库不能在一个实例上工作

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

我在两个EC2实例中设置安全组,以便能够通过port 3306连接到MYSQL。

我设置数据库安全组授权既EC2实例,也是我的设置CIDR/IP与第二EC2实例的私有IP(在一个没有MySQL数据库在配置Beanstallk应用程序集)

在两个轨道应用我设置的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'] %> 

我分配ENV值用于生产上的第二个实例(即一个没有MySQL的DB)与来自第一EC2实例ENV值。

我在这里错过了什么?

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

回答

0

问题解决了 - 而不是我设置database.yml文件的数据库凭据的ENV变量。弹性豆茎上的每个推动都会覆盖环境变量git aws.push

+0

你遵循什么步骤来解决这个问题?我有同样的问题。 – 2016-02-18 09:45:58

2

您可能忽略这一点:

socket: /var/lib/mysql/mysql.sock 
+0

Thx,但它没有帮助。我将它添加到生产部分的database.yml中,它不起作用。数据库不在本地服务器上 - 它是亚马逊上的附加实例。使用这一行,我仍然收到错误'无法通过套接字连接到本地MySQL服务器'/var/lib/mysql/mysql.sock'(2)(Mysql2 :: Error)' – kabebop 2013-04-23 17:51:20

+0

试试这个:http:/ /stackoverflow.com/questions/5499035/ruby-on-rails-3-cant-connect-to-local-mysql-server-through-socket-tmp-mysql-s – 2013-04-23 19:43:54

+0

我在看这个,但它不是我的情况。 MySQL数据库位于远程实例上,因此它不会在任何一个EC2实例上本地安装。我只能从一个实例连接到它,这就是问题所在。我认为socket错误是因为当rails找不到远程数据库时,它试图在本地机器上找到它。 – kabebop 2013-04-24 10:46:15

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'] %>,要么对其进行硬编码。显然,前者更可取。 :)

相关问题