Amazon Opsworks RDS、EC2、Rails 3、Phusion - 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2) (Mysql2::Error)

Amazon Opsworks RDS、EC2、Rails 3、Phusion - 无法通过套接字“/var/lib/mysql/mysql.sock”连接到本地 MySQL 服务器 (2) (Mysql2::Error)

我即将在 Amazon Opsworks 上部署一个简单的 Rails 应用程序 - 使用运行 Phusion Passenger 的 EC2 实例和数据库服务器的 RDS 实例(它运行 mySQL)。应用程序代码是从我的 Git Repo 中获取的。

问题就在这里。

EC2 实例将提供我的静态 ROR 主页 - public/index.html 文件,所以我知道应用程序在那里,并且正在被提供服务。

当我尝试执行 HTTP GET 从数据库获取资源表示时,出现了问题。

以下是确切的错误代码:

“无法通过套接字‘/var/lib/mysql/mysql.sock’连接到本地 MySQL 服务器 (2) (Mysql2::Error)”

我猜测它正尝试通过套接字连接到我笔记本电脑上的本地 MySQL 服务器,而不是尝试连接到我在 database.yml 中指定的 Amazon RDS 实例(MySQL 数据库服务器)。

这是我的数据库.yml:

development:
adapter: mysql2
encoding: utf8
database: *********_development
pool: 5
username: ****
password: ****
socket: /tmp/mysql.sock
host: localhost


test:
 adapter: mysql2
 encoding: utf8
 database: ********_test
 pool: 5
 username: ********
 password: ****
 socket: /tmp/mysql.sock
 host: localhost


production:
 adapter: mysql2 
 encoding: utf8
 database: *****
 username: ******
 password: *****
 host: ***dbinstance.*********.us-west-2.rds.amazonaws.com
 port: 3306 

如何让 rails 应用程序使用我在 database.yml 中指定的生产数据库,而不是始终尝试连接到本地数据库?

答案1

Opsworks 不使用您在应用程序中使用的 database.yml。要使其正常工作,您需要为 Opsworks 脚本提供正确的凭据。您可以将自定义 JSON 添加到堆栈中。请参阅此处了解其工作原理:

https://forums.aws.amazon.com/thread.jspa?threadID=119823

我在堆栈设置中添加了一个自定义 JSON,如下所示:

{
  "deploy": {
    "yourappname": {
      "database": {
        "adapter": "mysql2",
        "encoding": "unicode",
        "host": "yourdbonrds.rds.amazonaws.com",
        "port": "3306",
        "database": "yourdb",
        "pool": "5",
        "username": "yourusername",
        "password": "yourpassword"
      }
    }
  }
}

所有“您的”字段都需要通过您的自定义值进行交换。

还有一个提示。在 RDS 控制台中,您需要将 Opswork Rails 服务器的安全组添加到您的 RDS 实例,以便允许该实例连接到 RDS。请在此处查看如何操作:

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithSecurityGroups.AuthorizingEC2.html

您可以尝试一下是否可以从 Opsworks 实例连接到 RDS 实例,方法是通过 ssh 连接到该实例,然后通过 telnet 连接到您的 RDS 实例,例如 telnet Your-RDS-Instance 3306

相关内容