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? :/

1 réponse


popotte
Auteur
Réponse acceptée

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 ^^'

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