2014-12-28 3 views
0

방금 ​​레일 애플리케이션을 배치하고 MySQL 스키마를 생성하고 capistrano를 통해 database.yml에 복사했습니다. MySQL Workbench에서 DB 테이블을 봅니다 (SSH 터널링을 통해 VPS 호스트에 기록됩니다). Capistrano와 MySQL Workbench가 가능할지라도 레일스는 MySQL에 연결할 수 없습니다

내가

Action Controller Exception: Mysql2::Error Can't connect to MySQL server on '127.0.0.1' (111) 

나는 의아해 오전 무엇입니까 웹을 통해 내 레일 응용 프로그램에 액세스하려고

. database.yml의 설정은 MySQL Workbench의 설정과 동일합니다. 캐피 스트라 노가 그들에게 문제가 있다면 스키마를 만들 수 없었을 것입니다. 서버의 database.yml이 실제로 복사되었는지 확인했습니다. 또한 올바르게 심볼릭 링크되었습니다. 무엇이 문제 일 수 있습니까? 이 사건을 어떻게 디버깅 할 수 있습니까? 프로덕션 로그를 확인했는데이 경우를 설명 할 수있는 내용이 없습니다. 조언 해 줄 수 있어요?

Fyi : nginx 및 승객을 사용하고 있습니다.

+0

은 MySQL이 127.0.0.1에서 듣고 있습니까? 어쩌면 당신은 대신 'locahost'를 시도해야합니까? – kao3991

+1

시작하려는 환경을 확인하십시오. 예를 들어 프로덕션 db 설정을 업로드했으나 개발 세션을 시작하려고 했으므로 mysql 구성이 없습니다. –

답변

0

@ 모함마드 아부 샤디 : 네 말이 맞아. 이것이 문제였습니다. 고맙습니다! 답으로 입력하면 받아 들일 것입니다.

미스터리가 해결되었습니다. 레일 응용 프로그램은 cap production deploy을 사용하여 배포 했음에도 불구하고 개발 환경의 프로덕션 서버에서 실행 중이던 것 같습니다. 나는 그것에 관하여 상세한 블로그 포스트를 here 썼다. 단편 :

레일 스택의 설정이 다소 엉망입니다. 환경은 여러 위치에서 설정할 수 있습니다.

server { 
    rack_env   development; 

그것은 분명히 다른 곳을 통해 극복 (예 deploy.rb) 내가 설정 않았다 문제가 있었다이 특별한 경우에, 나는, /etc/nginx/nginx.conf에 다음 줄을 믿는다 환경을 "생산"으로.

문제점은 database.yml의 개발 설정에 올바른 데이터베이스 설정이 포함되어 있지 않았기 때문에 (응용 프로그램이 내 랩톱에서만 작동하기로되어 있음) 응용 프로그램이 MySQL에 연결하는 데 문제가 있다는 것은 놀라운 일이 아니 었습니다.

경우 누군가가 나는 다음과 같은 디버깅 전략을 추천 할 것 같은 문제에 실수를 한단다 : 프로덕션 서버에서 응용 프로그램의 루트 디렉토리에 rails console를 호출 (이 /home/deploy_user/my_app/current 같은 일 것입니다) 거기 Rails.env 실행합니다. 응용 프로그램이 실행되는 환경이 표시됩니다. 로그 디렉토리를 확인하는 또 다른 방법은 예를 들어 /home/deploy_user/my_app/shared/log입니다. 필자의 경우 development.log 파일은 production.log 파일보다 훨씬 최근의 타임 스탬프를가집니다. 내가 열었을 때 MySQL 오류를 생성 한 HTTP 요청의 로그를 분명하게 볼 수있었습니다 (시간은 같았고 IP 주소는 테스트 머신의 로그와 같았습니다). 따라서 개발 모드에서 실행중인 응용 프로그램에 질문하는 것이 분명했습니다.

관련 문제