[Rails Nginx MySQL Docker] Impossible de se connecter à la base

Par popotte, il y a 2 ans


Base de données MySQL
Outils Linux

Hello :)

Alors voila j'ai un soucis avec Docker, quand je lance la commande docker compose exec app rails db:migrate j'ai cette erreur:

rails aborted! ActiveRecord::ConnectionNotEstablished: Can't connect to server on 'database' (115) Caused by: Mysql2::Error::ConnectionError: Can't connect to server on 'database' (115) Tasks: TOP => db:migrate:reset => db:drop => db:check_protected_environments (See full trace by running task with --trace)

Je ne vois pas d'où ça pourrait venir :/

Voila pour le code
Docker Compose

version: '3' volumes: mysql_data: bundle: services: server: restart: unless-stopped build: context: . dockerfile: ./docker/server/Dockerfile volumes: - .:/var/www/app - ./docker/server/nginx.conf:/etc/nginx/conf.d/default.conf depends_on: - app ports: - 80:80 database: image: mysql:8.0 env_file: .env.$RAILS_ENV restart: unless-stopped volumes: - mysql_data:/var/lib/mysql ports: - "5432:3306" app: restart: unless-stopped build: context: . dockerfile: ./docker/app/Dockerfile volumes: - .:/var/www/app - bundle:/usr/local/bundle ports: - "3000:3000" depends_on: - database links: - database env_file: .env.$RAILS_ENV tty: true mailhog: image: mailhog/mailhog logging: driver: 'none' ports: - 1025:1025 - 8025:8025

Config Database

default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> port: 5432 development: <<: *default username: <%= ENV['DB_USER'] %> password: <%= ENV['DB_PASSWORD'] %> host: <%= ENV['DB_HOST'] %> database: <%= ENV['DB_NAME'] %>

Quelqu'un aurait une idée? ^^

EDIT

alors j'ai placé le port 5432 à 3306:3306, ça me fait cette erreur quand je lance db:create:

Created database 'app' Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2) Couldn't create '' database. Please check your configuration. rails aborted! ActiveRecord::ConnectionNotEstablished: Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2) Caused by: Mysql2::Error::ConnectionError: Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2)

quand je lance db:migrate:reset j'ai:

Dropped database 'app' Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2) Couldn't drop database '' rails aborted! ActiveRecord::ConnectionNotEstablished: Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2) Caused by: Mysql2::Error::ConnectionError: Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2) Tasks: TOP => db:drop:_unsafe (See full trace by running task with --trace)

En gros ça arrive à créer la database, ou à la drop pour faire un reset, et tout de suite après il y a l'erreur, du coup je comprends pas, je suis connecté à la base ou pas? :/

2 réponses

Grafikart, il y a 2 ans

Le .env chargé est bien le bon ? tu as bien DB_NAME qui vaut database dans tous les cas ?

popotte, il y a 2 ans

Hello :)

Yep ça me semble bon, mais je viens de comprendre le soucis

Ma config host, dbname etc.... je dois le placer en default pour qu'il puisse s'appliquer sur les base de prod et de test en plus de l'env de development

Et tout va bien mieux maintenant, j'ai passé mon temps à chercher du coté de Docker (90% du temps c'est Docker le pb ^^') mais en fait c'était juste qu'il fallait appliquer les paramètres pour les bases de prod et de test... Même si je n'utilise que la base de dev ^^'