2010-08-28 22 views
7

Tengo un sitio pequeño que construí usando el framework Play que estoy tratando de ejecutar en un servidor EC2 contra una instancia de Amazon RDS. Puedo ejecutar la aplicación en mi máquina contra la instancia de RDS y todo funciona bien. Pero cuando despliego a mi servidor EC2 se pone este error:Conexión EC2 a RDS usando Play framework

 
The last packet successfully received from the server was 1,282,977,731,085 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago. 
     at play.db.DBPlugin.onApplicationStart(DBPlugin.java:87) 
     at play.Play.start(Play.java:381) 
     at play.Play.init(Play.java:247) 
     at play.server.Server.main(Server.java:85) 
Caused by: java.net.ConnectException: Connection refused 

Mi primer pensamiento fue que era algún tipo de configuración de seguridad, pero tengo una aplicación basada en la primavera se ejecuta en Tomcat en el mismo servidor EC2 se conecta a la misma instancia de RDS con el mismo nombre de usuario y contraseña, y funciona muy bien. Solo la aplicación Play tiene problemas de conexión.

Parece que no se me ocurre ninguna explicación de por qué sucede esto o ideas sobre cómo solucionarlo.

¿Alguien ha visto algo así antes?

+0

Agregué "java" a su lista de etiquetas en caso de que se trate de un problema específico de Java. –

Respuesta

2

El problema es con el archivo application.conf. Si especifica su local de DB como esto:

db=mysql:root:[email protected] 

y su prod DB así:

%prod.db.url=jdbc:mysql://<your-db-ip>:3306/db 
%prod.db.user=db_user 
%prod.db.pass=db_pass 

Usted recibirá este error al intentar ejecutar en la producción debido a Jugar! en realidad está tratando de usar el db = mysql: root: pass @ db param para conectar, ya que los parametros de prod no anulan ese parámetro de forma específica. Para solucionar esto, asegúrese de conectarse al DB de la misma manera localmente y en prod.Esto funcionó para mí:

db.url=jdbc:mysql://localhost:3306/db 
db.user=root 
db.pass=pass 

%prod.db.url=jdbc:mysql://<your-db-ip>:3306/db 
%prod.db.user=db_user 
%prod.db.pass=db_pass 
0

No conozco ninguno de estos frameworks (o Java en general), pero tengo algo de experiencia con estos dos servicios de Amazon. Es posible que estos frameworks se comuniquen usando diferentes protocolos o en diferentes puertos. ? Si es así, aún podría ser un problema de seguridad.

Si esto es una posibilidad, y luego ir a EC2> Grupos de seguridad y si usted no tiene estas tres líneas, trate de añadir ellas:

All | icmp | -1 | -1 | default group 
All | tcp | 0 | 65535 | default group 
All | udp | 0 | 65535 | default group 

("grupo predeterminado" es el nombre predeterminado, y lo que llamé mío, pero el nombre de tu grupo podría ser diferente; en cualquier caso, asegúrate de que sean el nombre del grupo y no "0.0.0.0/0")

Además, si conoces protocolos/puertos particulares que necesitas abrir, luego obviamente agregarlos también.

0

Su error puede deberse a varias cosas, y parece estar sucediendo en un nivel inferior de la pila de protocolos de lo que está mirando. Recomiendo ejecutar un analizador de paquetes (como wireshark) en el servidor de envío para tratar de descubrir qué está pasando. Tal vez los paquetes no están llegando allí? ¿Tal vez su cliente está confundiendo algo debido al diferente entorno en el que se encuentra? Un sniffer de paquetes puede ser invaluable para desentrañar el misterio de la desconexión.

Si su servidor no tiene cabeza, o no puede reenviar una sesión gráfica, siempre puede usar una herramienta de línea de comandos, como tcpdump en sistemas * nix.