2013-02-22 5 views
1

J'ai une instance EC2 avec mon code Rails, et j'essaie de la configurer pour parler à Amazon RDS, mais j'obtiens une erreur lorsque j'essaie de démarrer le serveur rails que je ne sais pas comment corriger:Configuration de Rails sur EC2 et RDS

/opt/bitnami/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.3.11/lib/mysql2/client.rb:44:in `connect': Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Mysql2::Error) 

Dans mon dossier database.yml, j'ai ceci:

development: 
    adapter: mysql2 
    encoding: utf8 
    reconnect: false 
    database: development 
    pool: 5 
    username: root 
    password: secret 
    host: localhost 

production: 
    adapter: mysql2 
    encoding: utf8 
    database: mydbname 
    username: myusername 
    password: mypassword 
    host: mypublicdnsformydb 
    port: 3306 

J'assigné l'instance RDS au même groupe de sécurité que mon EC2 qui a :

22 (SSH) 0.0.0.0/0 
80 (HTTP) 0.0.0.0/0 
443 (HTTPS) 0.0.0.0/0 

Lorsque j'ajoute le CIDR de mon PC, je peux très bien me connecter à l'instance, donc je suis sûr que mon nom d'utilisateur, mon mot de passe et mon hôte sont corrects.

+0

Est-ce que vous essayez de vous connecter à l'aide de RDS 'mysql -u -p -h '? Pouvez-vous l'essayer et poster une sortie d'erreur le cas échéant? Aussi, à partir de votre groupe de sécurité, je ne vois aucune règle qui parle d'ouvrir le port MySQL 3306 sur votre instance RDS. Cela pourrait aussi être un drapeau. – rhetonik

+0

Voulez-vous dire exécuter cette commande depuis EC2? Le port semble ouvert car je peux me connecter à l'instance RDS depuis mon PC. – yellowreign

+0

Oui, la commande doit être exécutée à partir de votre instance EC2. Votre groupe de sécurité RDS indique que l'instance dispose d'un accès SSH, HTTP et HTTPS, mais qu'elle ne fournit pas d'accès MySQL. En vous connectant depuis votre PC local vers l'instance RDS, avez-vous voulu dire connexion SSH ou connexion MySQL? – rhetonik

Répondre

1

Pour résoudre ce problème, j'ai ajouté cette ligne dans mon database.yml pour la production

socket: /opt/bitnami/mysql/tmp/mysql.sock 

et je courais mon serveur rails spécifiant la production comme l'environnement:

rails s -e production 
0

Je pense que le problème est que votre environnement de développement pointe vers un mysql local, et non RDS. Par défaut Rails exécute l'environnement de développement et non la production, donc j'essayer d'ajouter la même configuration de la production dans le dev:

development: 
    adapter: mysql2 
    encoding: utf8 
    database: mydbname 
    username: myusername 
    password: mypassword 
    host: mypublicdnsformydb 
    port: 3306 
Questions connexes