2010-08-28 6 views
7

У меня есть небольшой сайт, который я создал с использованием платформы Play, которую я пытаюсь запустить на сервере EC2 против экземпляра RDS Amazon. Я могу запустить приложение на своей машине против экземпляра RDS, и все работает нормально. Но когда я развернуть его на мой EC2 сервер он получает эту ошибку:Подключение EC2 к RDS с использованием платформы Play

 
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 

Моя первая мысль была, что это какой-то настройки безопасности, но у меня есть приложение на основе Spring работает в Tomcat на том же сервере EC2 подключаетесь тот же экземпляр RDS с тем же именем пользователя и паролем, и он работает отлично. Только приложение Play имеет проблемы с подключением.

Кажется, я не могу объяснить, почему это происходит, или идеи о том, как это исправить.

Кто-нибудь видел что-нибудь подобное раньше?

+0

Я добавил «java» в ваш список тегов, если это проблема с java-спецификой. –

ответ

2

Проблема с файлом application.conf. Если вы укажете свой локальный БД так:

db=mysql:root:[email protected] 

и ваш DB лезвием, как это:

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

Вы получите эту ошибку при попытке запустить в производство, потому что играть! на самом деле пытается использовать db = mysql: root: pass @ db param для подключения, поскольку параметры prod не переопределяют этот параметр sepecifically. Чтобы исправить это, обязательно подключитесь к БД так же локально и в prod.Это сработало для меня:

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

Я ничего не знаю об одной из этих фреймворков (или Java вообще), но у меня есть некоторый опыт работы с обеими этими службами Amazon - возможно ли, что эти фреймворки обмениваются данными с использованием разных протоколов или на разных портах ? Если это так, это может быть проблема безопасности.

Если это возможно, а затем перейти к EC2> группам безопасности, и если вы не имеете эти три строки, попробуйте добавить их:

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

(«группа по умолчанию» это имя по умолчанию, и то, что я назвал, но ваше имя группы может отличаться - в любом случае убедитесь, что это имя группы, а не «0.0.0.0/0»)

Кроме того, если вам известны конкретные протоколы/порты, которые вам нужны открыть, то, очевидно, добавить их тоже.

0

Ваша ошибка может быть вызвана любым количеством вещей и, кажется, происходит на более низком уровне стека протоколов, чем то, что вы смотрите. Я рекомендую запустить анализатор пакетов (например, wireshark) на отправляющем сервере, чтобы попытаться выяснить, что происходит. Может быть, пакеты там не добираются? Может быть, ваш клиент что-то путает из-за того, в какой среде он находится? Сниффер пакетов может быть бесценным для раскрытия тайны dysconnection.

Если ваш сервер безголовый или вы не можете перенаправить графический сеанс, вы всегда можете использовать инструмент командной строки, такой как tcpdump on * nix systems.

0

я задал тот же вопрос здесь

Amazon RDS and Elastic Beanstalk connectivity

Скорее всего, ваш вопрос будет исправлена ​​после того, как вы добавить «elasticbeanstalk-умолчанию» группы безопасности в RDS группы безопасности по умолчанию