Bonjour,

Je créer automatiquement une base de données pour chaque compte "Entreprise" au sein de mon application. Pour ce faire, j'édite les fichiers : .env et doctrie.yamlet je créer également un utilisateur dédié pour chaque base de données que je créer sur mon SGBD.

Voici, les lignes que j'ajoute sur mon .env et mon doctrine.yaml :

Voici la ligne que j'ajoute en gras dans mon .env :

DATABASE_[ID_COMPANY]_URL="mysql://[USER_COMPANY]:[PASSWORD_COMPANY]@database:3306/[DB_NAME_COMPANY]?serverVersion=mariadb-10.4.21&charset=utf8mb4"

Voici les lignes que j'ajoute dans mon doctrine.yaml (j'ai ajouté un peu de contexte :

[doctrine.yaml]
doctrine:
    dbal:
        connections:
            keeb:
                url: '%env(resolve:DATABASE_KEEB_URL)%'
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
    orm:
        entity_managers:
            keeb:
                connection: keeb
                mappings:
                    keeb:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: keeb

Globalement, les fichiers sont bien édités de la manière que je souhaite, j'ai bien mon nouvel utilisateur qui est créé dans mon SGBD. Cependant, lorsque j'exécute la commande suivante : php bin/console doctrine:database:create --connection=keeb. Ça ne fonctionne pas en mode prod, mais en mode dev ça marche. Afin d'exécuter cette commande, j'utilise Process de Symfony, soit la commande suivante :

// Run for : php bin/console doctrine:database:create --connection=$dbName
$process = new Process(['php', '/srv/app/bin/console', 'doctrine:database:create', "--connection=$dbName"]);
$process->run();
if (!$process->isSuccessful()) throw new ProcessFailedException($process);

Le problème est que j'ai une erreur du type : Doctrine ORM Connection named "test" does not exist.

Merci d'avance pour vos réponses, je reste disponible pour enrichir mon explication si besoin.

PS : j'évolue sur un environnement Docker

14 réponses


Khodeki
Auteur
Réponse acceptée

Hello, il se trouve qu'éditer les fichiers de configuration sur Symfony en runtime n'est pas possible car ces mêmes fichiers sont dumper par Symfony en environement de production. On a donc décider de modifier la création de BDD en ne passant plus par l'édition des fichiers de configuration mais directement avec du code et ça semble fonctionner. Merci pour ton aide ;)

Hello, tu as une db test en mode dev?

Si c'est le cas Symfony doit essayer de lancer une base de test qui n'existe pas en prod, il faura juste trouver l'endroit où il lance la migration de test, le retirer et le placer dans l'env de dev uniquement

Khodeki
Auteur

Hello, merci pour ta réponse, j'ai pris l'exemple de "test" qui serait le nom de l'entreprise, mais du coup on aurait une bdd comme ça :

[Fichier : .env]
DATABASE_TEST_URL="mysql://starterp_test:mot_de_passe@database:3306/starterp_test?serverVersion=mariadb-10.4.21&charset=utf8mb4"

En gros, le nom réel de la bdd serait : starterp_test avec le prefixe starterp_ qui est le nom de mon application.

Et on aurait pour le fichier doctrine.yaml :

[Fichier : doctrine.yaml]
doctrine:
    dbal:
        connections:
            keeb:
                url: '%env(resolve:DATABASE_KEEB_URL)%'
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
            test:
                url: '%env(resolve:DATABASE_TEST_URL)%'
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
    orm:
        entity_managers:
            keeb:
                connection: keeb
                mappings:
                    keeb:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: keeb
                    test:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: test

Et si j'essaye avec n'importe quelle autre nom, ça ne marche pas, le plus bizarre. C'est que ça marche quand je suis en mode "dev" mais dés que je passe en mode "prod" que ce soit sur mon serveur ou mon ordi en local, la génération de la base de données ne marche plus car il ne reconnaire plus la connection "test" alors qu'elle figure bien dans le .env et dans le doctrine.yaml.

Voilà, voilà

Mmmh je vois, je peux voir ton fichier .env entier (penses à virer les infos privées avant de poster :p)?

Ensuite le problème peut venir de l'hébergeur, tu est sur quel hébergeur?

Pour ce qui est de l'hébergeur, tu as pensé à placer tes variables d'env dans l'hébergeur ou dans des Github secrets? Certains hébergeurs ignorent le fichier .env, copient le .env.example et remplace les variables par celle que tu a définies directement dans l'interface de l'hebergeur

Khodeki
Auteur

Yep, je peux te transmettre mon .env :

APP_ENV=dev
APP_SECRET=
MESSENGER_TRANSPORT_DSN=doctrine://default?auto_setup=0
MYSQL_USER=user
MYSQL_PASSWORD=
MYSQL_DATABASE=starterp
MYSQL_ROOT_PASSWORD=
SERVER_NAME=*.localhost
MAILER_DSN=smtp://:@pro1.mail.ovh.net:587
API_TOKEN_INSEE=""
DATABASE_URL="mysql://root:@database:3306/starterp?serverVersion=10.4.26-MariaDB-1:10.4.26+maria~ubu2004&charset=utf8mb4"
DATABASE_FREEMIUM_URL="mysql://root:@database:3306/starterp_freemium?serverVersion=10.4.26-MariaDB-1:10.4.26+maria~ubu2004&charset=utf8mb4"
DATABASE_INOFIVE_URL="mysql://root:@database:3306/starterp_inofive?serverVersion=mariadb-10.4.21&charset=utf8mb4"
DATABASE_KEEB_URL="mysql://root:@database:3306/starterp_keeb?serverVersion=mariadb-10.4.21&charset=utf8mb4"
DATABASE_STARTERP_URL="mysql://root:@database:3306/starterp_starterp?serverVersion=mariadb-10.4.21&charset=utf8mb4"
DATABASE_TEST_URL="mysql://starterp_test:@database:3306/starterp_test?serverVersion=mariadb-10.4.21&charset=utf8mb4"

Je viens de me rendre compte que la variable APP_ENV n'est pas set sur prod mais dev, c'est bizarre. Mais normalement ça ne devrait pas impacter le fonctionement de la création d'une base de données. Voici le bout de code qui permet de générer ma base de données suite à l'édition des fichiers : .envet doctrine.yaml :

// Then we create a specific mysql user for the company
$multiBDDService->addMysqlUser($company);
// Get the database name to target the entity manager
[$dbName, $dbURL] = $multiBDDService->formatDBName($company);
 // Run for : php bin/console doctrine:database:create --connection=$dbName
$process = new Process(['php', '/srv/app/bin/console', 'doctrine:database:create', "--connection=$dbName"]);
$process->run();
if (!$process->isSuccessful()) throw new ProcessFailedException($process);
// Run for : php bin/console doctrine:migrations:migrate --em=$dbName --no-interaction
$process = new Process(['php', '/srv/app/bin/console', 'doctrine:migrations:migrate', "--em=$dbName", "--no-interaction"]);
$process->run();
if (!$process->isSuccessful()) throw new ProcessFailedException($process);
// Finally, we need to reduce permission for the user that we created before
$multiBDDService->updateMysqlUser($company);
// We set the new status
$company->setStatus(CompanyService::STATUS_EXPORTED);
// Then we can save the status
$doctrine->getManager()->persist($company);
$doctrine->getManager()->flush();

Et voici mon doctrine.yaml :

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                # configure these for your database server
                url: '%env(resolve:DATABASE_URL)%'
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
            freemium:
                # configure these for your database server
                url: '%env(resolve:DATABASE_FREEMIUM_URL)%'
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4

        # BELOW ARE AUTO IMPORTED CONFIG USING THE CONNECTION TAG
            inofive:
                url: '%env(resolve:DATABASE_INOFIVE_URL)%'
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
            keeb:
                url: '%env(resolve:DATABASE_KEEB_URL)%'
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
            starterp:
                url: '%env(resolve:DATABASE_STARTERP_URL)%'
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
            test:
                url: '%env(resolve:DATABASE_TEST_URL)%'
                driver: 'pdo_mysql'
                server_version: '5.7'
                charset: utf8mb4
            ###CONNECTION_TAG_NO_DELETE###

        # IMPORTANT: You MUST configure your server version,
        # either here or in the DATABASE_URL env var (see .env file)
        #server_version: '13'
    orm:
        auto_generate_proxy_classes: true
        default_entity_manager: default
        entity_managers:
            default:
                connection: default
                mappings:
                    default:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: default
            freemium:
                connection: freemium
                mappings:
                    freemium:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: freemium

            # BELOW ARE AUTO IMPORTED CONFIG USING THE ENTITY_MANAGER TAG
            inofive:
                connection: inofive
                mappings:
                    inofive:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: inofive
            keeb:
                connection: keeb
                mappings:
                    keeb:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: keeb
            starterp:
                connection: starterp
                mappings:
                    starterp:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: starterp
            test:
                connection: test
                mappings:
                    test:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: test
            ###ENTITY_MANAGER_TAG_NO_DELETE###

when@test:
    doctrine:
        dbal:
            # "TEST_TOKEN" is typically set by ParaTest
            dbname_suffix: ''

when@prod:
    doctrine:
        orm:
            auto_generate_proxy_classes: false
            query_cache_driver:
                type: pool
                pool: doctrine.system_cache_pool
            result_cache_driver:
                type: pool
                pool: doctrine.result_cache_pool

    framework:
        cache:
            pools:
                doctrine.result_cache_pool:
                    adapter: cache.app
                doctrine.system_cache_pool:
                    adapter: cache.system

Je tiens également à préciser que j'utilise des conteneurs Docker pour faire fonctionner mon app (je pense que Docker peut-être la source de mes problèmes).

Concernant l'hébergeur, merci pour les informations, je vais en parler avec mon équipe de projet.

Khodeki
Auteur

J'ajoute également le résultat d'une commande lorsque je tape la commande php bin/console doctrine:database:create --connection=test dans un terminal, ça ne fonctionne pas non plus...

{"message":"Error thrown while running command \"doctrine:database:create --connection=test\". Message: \"Doctrine ORM Connection named \"test\" does not exist.\"","context":{"exception":{"class":"InvalidArgumentException","message":"Doctrine ORM Connection named \"test\" does not exist.","code":0,"file":"/srv/app/vendor/doctrine/persistence/src/Persistence/AbstractManagerRegistry.php:101"},"command":"doctrine:database:create --connection=test","message":"Doctrine ORM Connection named \"test\" does not exist."},"level":500,"level_name":"CRITICAL","channel":"console","datetime":"2022-11-19T18:58:54.564948+00:00","extra":{}}
18:58:54 CRITICAL  [console] Error thrown while running command "doctrine:database:create --connection=test". Message: "Doctrine ORM Connection named "test" does not exist." ["exception" => InvalidArgumentException { …},"command" => "doctrine:database:create --connection=test","message" => "Doctrine ORM Connection named "test" does not exist."]
{"message":"Command \"doctrine:database:create --connection=test\" exited with code \"1\"","context":{"command":"doctrine:database:create --connection=test","code":1},"level":100,"level_name":"DEBUG","channel":"console","datetime":"2022-11-19T18:58:54.571147+00:00","extra":{}}

Okay je ne vois pas de soucis dans ces fichiers (bon vu que ça fonctionnait en dev je m'en doutais ^^')

Sinon pour tes environnements, tu devrait faire un fichier .env.production pour le .env de prod, ensuite dans Docker copier le .env.production COPY .env.production /path/du/container/.env, ça te permettra d'adapter l'environnement pour la prod :p

Ah et je peux avoir ton Dockerfile? et si tu utilises un container PHP/Apache-Nginx faudrait voir aussi les fichiers de conf apache/nginx que tu pousses dans le container :)

Pour la création de base de données, quand tu lances des commandes en prod tu as des logs coté hébergeur? (problèmes de permissions ou autre)

Autre question, quand tu testes en dev, tu montes un container Docker ou tu testes le code directement? En principe si tu passes par Docker en local et que ça fonctionne ça devrait fontionner en prod aussi, c'est le principe de Docker

Khodeki
Auteur

Merci encore pour ton aide, alors, quand je run mon app en local sur mon ordi (en dev), je la run avec Docker avec les mêmes container, donc c'est étrange que ça ne fonctionne pas...

Voici le log d'erreur associer à la création de la base de données :

{"message":"Uncaught PHP Exception Symfony\\Component\\Process\\Exception\\ProcessFailedException: \"The command \"'php' '/srv/app/bin/console' 'doctrine:database:create' '--connection=test'\" failed.\n\nExit Code: 1(General error)\n\nWorking directory: /srv/app/public\n\nOutput:\n================\n\n\nError Output:\n================\n{\"message\":\"Error thrown while running command \\\"doctrine:database:create --connection=test\\\". Message: \\\"Doctrine ORM Connection named \\\"test\\\" does not exist.\\\"\",\"context\":{\"exception\":{\"class\":\"InvalidArgumentException\",\"message\":\"Doctrine ORM Connection named \\\"test\\\" does not exist.\",\"code\":0,\"file\":\"/srv/app/vendor/doctrine/persistence/src/Persistence/AbstractManagerRegistry.php:101\"},\"command\":\"doctrine:database:create --connection=test\",\"message\":\"Doctrine ORM Connection named \\\"test\\\" does not exist.\"},\"level\":500,\"level_name\":\"CRITICAL\",\"channel\":\"console\",\"datetime\":\"2022-11-20T13:18:56.718705+00:00\",\"extra\":{}}\n13:18:56 CRITICAL  [console] Error thrown while running command \"doctrine:database:create --connection=test\". Message: \"Doctrine ORM Connection named \"test\" does not exist.\" [\"exception\" => InvalidArgumentException { …},\"command\" => \"doctrine:database:create --connection=test\",\"message\" => \"Doctrine ORM Connection named \"test\" does not exist.\"]\n{\"message\":\"Command \\\"doctrine:database:create --connection=test\\\" exited with code \\\"1\\\"\",\"context\":{\"command\":\"doctrine:database:create --connection=test\",\"code\":1},\"level\":100,\"level_name\":\"DEBUG\",\"channel\":\"console\",\"datetime\":\"2022-11-20T13:18:56.727596+00:00\",\"extra\":{}}\n\nIn AbstractManagerRegistry.php line 101:\n                                                        \n  Doctrine ORM Connection named \"test\" does not exist.  \n                                                        \n\ndoctrine:database:create [-s|--shard SHARD] [-c|--connection [CONNECTION]] [--if-not-exists]\n\n\" at /srv/app/src/Controller/StarterpController.php line 324","context":{"exception":{"class":"Symfony\\Component\\Process\\Exception\\ProcessFailedException","message":"The command \"'php' '/srv/app/bin/console' 'doctrine:database:create' '--connection=test'\" failed.\n\nExit Code: 1(General error)\n\nWorking directory: /srv/app/public\n\nOutput:\n================\n\n\nError Output:\n================\n{\"message\":\"Error thrown while running command \\\"doctrine:database:create --connection=test\\\". Message: \\\"Doctrine ORM Connection named \\\"test\\\" does not exist.\\\"\",\"context\":{\"exception\":{\"class\":\"InvalidArgumentException\",\"message\":\"Doctrine ORM Connection named \\\"test\\\" does not exist.\",\"code\":0,\"file\":\"/srv/app/vendor/doctrine/persistence/src/Persistence/AbstractManagerRegistry.php:101\"},\"command\":\"doctrine:database:create --connection=test\",\"message\":\"Doctrine ORM Connection named \\\"test\\\" does not exist.\"},\"level\":500,\"level_name\":\"CRITICAL\",\"channel\":\"console\",\"datetime\":\"2022-11-20T13:18:56.718705+00:00\",\"extra\":{}}\n13:18:56 CRITICAL  [console] Error thrown while running command \"doctrine:database:create --connection=test\". Message: \"Doctrine ORM Connection named \"test\" does not exist.\" [\"exception\" => InvalidArgumentException { …},\"command\" => \"doctrine:database:create --connection=test\",\"message\" => \"Doctrine ORM Connection named \"test\" does not exist.\"]\n{\"message\":\"Command \\\"doctrine:database:create --connection=test\\\" exited with code \\\"1\\\"\",\"context\":{\"command\":\"doctrine:database:create --connection=test\",\"code\":1},\"level\":100,\"level_name\":\"DEBUG\",\"channel\":\"console\",\"datetime\":\"2022-11-20T13:18:56.727596+00:00\",\"extra\":{}}\n\nIn AbstractManagerRegistry.php line 101:\n                                                        \n  Doctrine ORM Connection named \"test\" does not exist.  \n                                                        \n\ndoctrine:database:create [-s|--shard SHARD] [-c|--connection [CONNECTION]] [--if-not-exists]\n\n","code":0,"file":"/srv/app/src/Controller/StarterpController.php:324"}},"level":500,"level_name":"CRITICAL","channel":"request","datetime":"2022-11-20T13:18:56.734149+00:00","extra":{}}

Voici mon Dockerfile :

# the different stages of this Dockerfile are meant to be built into separate images
# https://docs.docker.com/develop/develop-images/multistage-build/#stop-at-a-specific-build-stage
# https://docs.docker.com/compose/compose-file/#target

# https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact
ARG PHP_VERSION=7.4.30
ARG CADDY_VERSION=2
ARG SYMFONY_VERSION=5.4

# "php" stage
FROM php:${PHP_VERSION}-fpm-alpine AS symfony_php

# persistent / runtime deps
RUN apk add --no-cache \
        acl \
        fcgi \
        file \
        gettext \
        git \
        gnu-libiconv \
    ;

# install gnu-libiconv and set LD_PRELOAD env to make iconv work fully on Alpine image.
# see https://github.com/docker-library/php/issues/240#issuecomment-763112749
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so

ARG APCU_VERSION=5.1.21
RUN set -eux; \
    apk add --no-cache --virtual .build-deps \
        $PHPIZE_DEPS \
        icu-dev \
        libzip-dev \
        zlib-dev \
    ; \
    \
    docker-php-ext-configure zip; \
    docker-php-ext-install -j$(nproc) \
        intl \
        zip \
    ; \
    pecl install \
        apcu-${APCU_VERSION} \
    ; \
    pecl clear-cache; \
    docker-php-ext-enable \
        apcu \
        opcache \
    ; \
    \
    runDeps="$( \
        scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
            | tr ',' '\n' \
            | sort -u \
            | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
    )"; \
    apk add --no-cache --virtual .phpexts-rundeps $runDeps; \
    \
    apk del .build-deps

RUN docker-php-ext-install pdo_mysql

COPY docker/php/docker-healthcheck.sh /usr/local/bin/docker-healthcheck
RUN chmod +x /usr/local/bin/docker-healthcheck

HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD ["docker-healthcheck"]

RUN ln -s $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini
COPY docker/php/conf.d/symfony.prod.ini $PHP_INI_DIR/conf.d/symfony.ini

COPY docker/php/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf

COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
RUN chmod +x /usr/local/bin/docker-entrypoint

VOLUME /var/run/php

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
ENV COMPOSER_ALLOW_SUPERUSER=1

ENV PATH="${PATH}:/root/.composer/vendor/bin"

WORKDIR /srv/app

###> recipes ###
###< recipes ###

COPY . .

RUN set -eux; \
    mkdir -p var/cache var/log; \
    composer install --prefer-dist --no-dev --no-progress --no-scripts --no-interaction; \
    composer dump-autoload --classmap-authoritative --no-dev; \
    composer symfony:dump-env prod; \
    composer run-script --no-dev post-install-cmd
RUN chmod +x bin/console; sync
VOLUME /srv/app/var

ENTRYPOINT ["docker-entrypoint"]
CMD ["php-fpm"]

FROM caddy:${CADDY_VERSION} AS symfony_caddy

WORKDIR /srv/app

COPY --from=symfony_php /srv/app/public public/
COPY docker/caddy/Caddyfile /etc/caddy/Caddyfile

J'aimerais également ajouter, que l'erreur est la suivante : Doctrine ORM Connection named "test" does not exist.

Or, si je tape la commande suivante : php bin/console debug:container --parameter=doctrine.connections --env=prod --format=json

J'obtient bien une connection test, j'ai également cette connection dans mon doctrine.yaml :

{
    "doctrine.connections": {
        "default": "doctrine.dbal.default_connection",
        "freemium": "doctrine.dbal.freemium_connection",
        "inofive": "doctrine.dbal.inofive_connection",
        "keeb": "doctrine.dbal.keeb_connection",
        "starterp": "doctrine.dbal.starterp_connection",
        "test": "doctrine.dbal.test_connection"
    }
}

Merci, bonne journée

Mmmh ok je vois, alors c'est peut être l'env le problème

Quand tu run ta commande, par défaut le --env= doit prendre l'env affiché dans le fichier .env qui est dev

Faurait modifier cette partie de Dockerfile:

COPY . .

Pour copier l'app sans les .env, ensuite dans ton Dockerfile il faudrait une variable $TARGET_ENV ou un truc du genre, et quand ton $TARGET_ENV est prod il faudrait copier un autre fichier .env, en gros fait un fichier .env.production avec la variable APP_ENV à prod, et fait ça sur Dockerfile:

COPY .env.production .env

Ca devrait régler le problème :)

Khodeki
Auteur

Je pense pas que l'erreur vienne directement de mon .env mais plus de Doctrine...

Alors, j'ai investiguer un peu plus en détails sur le problème, la fameuse erreur : Doctrine ORM Connection named "test" does not exist.

Or, si j'execute la commande suivante : php bin/console debug:container --parameter=doctrine.connections --env=prod --format=json

J'obtient bien :

{
    "doctrine.connections": {
        "default": "doctrine.dbal.default_connection",
        "freemium": "doctrine.dbal.freemium_connection",
        "inofive": "doctrine.dbal.inofive_connection",
        "keeb": "doctrine.dbal.keeb_connection",
        "starterp": "doctrine.dbal.starterp_connection",
        "test": "doctrine.dbal.test_connection"
    }
}

Or, si j'execute la commande suivante : php bin/console doctrine:database:create --connection=test"

J'ai l'erreur suivante : Doctrine ORM Connection named "test" does not exist.

Voici, l'erreur en plus détailler :

{"message":"Error thrown while running command \"doctrine:database:create --connection=test\". Message: \"Doctrine ORM Connection named \"test\" does not exist.\"","context":{"exception":{"class":"InvalidArgumentException","message":"Doctrine ORM Connection named \"test\" does not exist.","code":0,"file":"/srv/app/vendor/doctrine/persistence/src/Persistence/AbstractManagerRegistry.php:101"},"command":"doctrine:database:create --connection=test","message":"Doctrine ORM Connection named \"test\" does not exist."},"level":500,"level_name":"CRITICAL","channel":"console","datetime":"2022-11-22T13:39:56.849287+00:00","extra":{}}
13:39:56 CRITICAL  [console] Error thrown while running command "doctrine:database:create --connection=test". Message: "Doctrine ORM Connection named "test" does not exist." ["exception" => InvalidArgumentException { …},"command" => "doctrine:database:create --connection=test","message" => "Doctrine ORM Connection named "test" does not exist."]
{"message":"Command \"doctrine:database:create --connection=test\" exited with code \"1\"","context":{"command":"doctrine:database:create --connection=test","code":1},"level":100,"level_name":"DEBUG","channel":"console","datetime":"2022-11-22T13:39:56.855465+00:00","extra":{}}

Merci, bonne journée

Doctrine fonctionne avec le fichier d'env, et quand tu ajoutes --env= tu écrases la valeur APP_ENV

Après oui mieux vaut s'en assurer, essayes cette commande php bin/console debug:container --env=prod, si ça fonctionne c'est le fichier d'env, si ça ne fonctionne pas essayes php bin/console debug:container --parameter=doctrine.connections --format=json

Khodeki
Auteur

Hello, désolé pour le retard de ma réponse ;)

Alors j'ai déjà essayer, c'est ce que j'avais indiquer dans mon précédent post, à moins que je ne comprenne pas ta question ?

Pas de soucis x)

Alors en gros tu reprends ta commande qui fonctionne bien, et tu enlèves uniquement le flag --env=prod et en conservant les flags --parameter=doctrine.connections --format=json

Si tu choppes ton erreur c'est que le problème vient de l'env, si ça fonctionne alors fait l'inverse, tu retires --parameter=doctrine.connections --format=json et tu places uniquement --env=prod, si tu choppes une erreur c'et qu'il faut ajouter ces deux flags parameter et format :p

Khodeki
Auteur

Yep, j'ai essayer les deux commandes :
php bin/console debug:container --parameter=doctrine.entity_managers --format=json => OK
php bin/console debug:container --env=prod => OK

Arf je viens à peine de me rendre compte que c'était une toute autre commande :'X

php bin/console doctrine:database:create --connection=test --env=prod En fait fallait faire ça ^^'