Maison >développement back-end >tutoriel php >Comment corriger 'SQLState [Hy000] [2002] La connexion a refusé' Erreur Laravel dans les actions GitHub
Les actions GitHub rationalisent l'intégration continue (CI) pour les référentiels GitHub. Les fichiers de workflow YAML automatisent des tâches comme les tests et le déploiement. Un accroc de Laravel / MySQL CI commun est l'erreur "SQLState [Hy000] [2002] a refusé", surtout sur les migrations de test initiales. Cet article explore trois causes fréquentes et leurs solutions.
un flux de travail des actions GitHub valide (exemple)
Avant le dépannage, examinons un workflow Laravel / MySQL GitHub fonctionnel:
name: Run tests on: [push] jobs: tests: name: Run tests runs-on: ubuntu-latest services: mysql: image: mysql:8 env: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: testing ports: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - uses: actions/checkout@v4 with: fetch-depth: 1 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: 8.3 - name: Run composer install run: composer install -n --prefer-dist - name: Prepare Laravel Application run: | cp .env.ci .env php artisan key:generate - name: Run tests run: php artisan test
.env.ci
:
<code>DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=testing DB_USERNAME=root DB_PASSWORD=password</code>
1. Port mysql incorrect
Le coupable le plus courant: numéros de port incompatibles. Les actions GitHub attribuent un port aléatoire au Container de service 3306
.
${{ job.services.mysql.ports['3306'] }}
: - name: Run tests run: php artisan test env: DB_PORT: ${{ job.services.mysql.ports['3306'] }}
33306
) dans le flux de travail et .env.ci
. 2. Service MySQL manquant
surplombant la définition services
est une surveillance fréquente. Le flux de travail ci-dessus démontre la bonne inclusion. Sans cela, la connexion échoue.
3. MySQL INDESSIBILITÉ
Même avec un service défini, MySQL pourrait ne pas être immédiatement réactif. Le paramètre options
dans la définition de service mysql
est crucial:
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
Cela garantit que le flux de travail attend que MySQL soit prêt avant de continuer. Sans cela, les tests peuvent s'exécuter prématurément, entraînant l'erreur de connexion.
Conclusion
Ce guide couvre trois raisons clés de l'erreur "SQLState [Hy000] [2002] Refused" dans les actions GitHub Laravel / MySQL Workflows. L'adresse de la cartographie des ports, de la définition de service et de la préparation MySQL assure des processus CI plus lisses. Pour la stabilité des applications de production, envisagez des outils de surveillance des erreurs robustes comme Honeybadger, qui s'intègre bien à Laravel.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!