【Rails】 Mysql2::Error::ConnectionError 해결

Rails 앱에 유효성 검증을 정의한 후 테스트 데이터 등록의 성공이 목적의 비망록입니다. 그 때문에, 밸리데이션의 정의, 기술은 끝나고 있는 상태입니다.

데이터를 저장하고 싶지만 Mysql2에 연결할 수 없습니다.



Docker 환경하의 Rails 앱에서 app/models에 밸리데이션을 정의하고 동작 체크를 위해 MySQL에 데이터 등록을 시도했습니다. 그렇다면.....
Mysql2::Error::ConnectionError at /Unknown MySQL server host 'db' (0)

MySQL에 연결되어 있지 않다고 분노했습니다.

정확히 같은 오류 에 빠져 있는 분도 있었습니다만, 해결책은 실려 있지 않습니다.
기사에 실려 있던 docker-compose up을 실천하는 것도, docker는 정상적으로 기동하고 있었습니다.

어쨌든 데이터가 등록되지 않았기 때문에 다음은 데이터베이스를 확인했습니다.
①rails db:create
②rails db:migrate

그러나 좋지 않았습니다.
아래는 rails db : create 실행 후 터미널에 출력 된 오류
Unknown MySQL server host 'db' (0)
Couldn't create 'myapp_development' database. Please check your configuration.
rails aborted!
Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (0)
/Users/athlaliel/test/qa-coin/bin/rails:9:in `<top (required)>'
/Users/athlaliel/test/qa-coin/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:create
(See full trace by running task with --trace)

이 후에도 여러가지 시도한 결과 원인을 알았습니다.

Docker 환경에서 앱을 만들고 있는데, 실제로는 로컬 환경에서 오로지 명령을 두드리고 있었습니다. Docker의 컨테이너에서 MySQL도 관리되고있는 이상, 찾을 수 없었습니다.

아래의 명령을 순서대로 실행하는 것으로 무사히 데이터베이스는 작성되어 갱신도 가능하게 되었습니다.
①docker-compose exec web rails db:create 

②docker-compose exec web rails db:migrate

유효성 검증 데이터 등록



데이터베이스가 Docker에 생성되었으므로 테스트 데이터를 등록하고 유효성 검사가 작동하는지 확인합니다. rails console을 시작하고 테스트 데이터를 등록합니다.

바리데이션에 기술하는 문장은 여기에서는 쓰지 않습니다만, 변수를 정의해 <모델명.create>를 입력합니다.
이 커멘드로 데이터 등록이 성공하면, SQL과 같은 문언이 표시되어 데이터의 저장까지 실시합니다. 따라서 별도의 .save 명령을 입력할 필요가 없습니다.



만약 에러가 일어나면, 아래의 커멘드로 체크해 원인의 추구를 실시합니다.
pry(main)> <モデル名>.errors

※user.rbというmodelsファイルがあれば、user.errorsとターミナルに入力します。



Mysql2::Error::ConnectionError와 같은 오류가 발생하면 현재 어떤 환경에서 작업하고 있는지 확인해 보는 것이 좋습니다.

참고 기사
Unknown MySQL server host 'db'(0) 오류가 사라지지 않음
Active Record 유효성 검사

좋은 웹페이지 즐겨찾기