Amazon Opsworks RDS, EC2, Rails 3, Phusion - Não é possível conectar-se ao servidor MySQL local por meio do soquete '/var/lib/mysql/mysql.sock' (2) (Mysql2 :: Error)

2

Estou muito perto de ter um aplicativo simples do Rails implantado no Amazon Opsworks - usando uma instância do EC2 executando o Phusion Passenger e uma instância do RDS para o servidor de banco de dados (ele executa o mySQL). O código do aplicativo é obtido do meu Git Repo.

Aqui está o problema.

A instância do EC2 exibirá minha página inicial de ROR estática - o arquivo public / index.html, então sei que o aplicativo está lá e sendo exibido.

O problema ocorre quando tento fazer um HTTP GET para buscar representações de recursos do banco de dados.

Aqui está o código de erro exato:

"Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) (Mysql2::Error)"

Eu estou supondo que ele está tentando se conectar a um servidor MySQL local no meu laptop através de um soquete, em vez de tentar se conectar à instância do Amazon RDS (o servidor de banco de dados MySQL) que eu especifiquei em database.yml.

Aqui está o meu database.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 

Como posso obter o aplicativo rails para usar o banco de dados de produção que especifico no database.yml, em vez de sempre tentar conectar-me a um banco de dados local?

    
por fixer1234 23.06.2013 / 02:14

1 resposta

0

Opsworks não usa o database.yml que você está usando em seu aplicativo. Para obter esse trabalho, você precisa fornecer os scripts do Opsworks com as credenciais corretas. Você pode adicionar JSON personalizado à sua pilha. Por favor, veja aqui para ter uma ideia de como funciona:

link

Eu adicionei um JSON personalizado às minhas configurações de pilha assim:

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

Todos os campos "your" precisam ser trocados por seus valores personalizados.

Uma dica adicional. No console do RDS, você precisa adicionar o grupo de segurança do servidor Opswork Rails à sua instância do RDS, para que a instância possa se conectar ao RDS. Por favor, veja aqui como fazer:

link

Você pode tentar se pode se conectar à instância do RDS do departamento de Opsworks em ssh para a instância e, em seguida, fazer o telnet para sua instância do RDS, por exemplo, telnet Your-RDS-Instance 3306

    
por 27.06.2013 / 15:26