Maison > développement back-end > tutoriel php > Comment corriger 'SQLState [Hy000] [2002] La connexion a refusé' Erreur Laravel dans les actions GitHub

Comment corriger 'SQLState [Hy000] [2002] La connexion a refusé' Erreur Laravel dans les actions GitHub

Karen Carpenter
Libérer: 2025-03-06 02:29:12
original
662 Les gens l'ont consulté

How to fix

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
Copier après la connexion

.env.ci:

<code>DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=testing
DB_USERNAME=root
DB_PASSWORD=password</code>
Copier après la connexion

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.

  • Port dynamique: Accédez au port attribué à l'aide de ${{ job.services.mysql.ports['3306'] }}:
- name: Run tests
  run: php artisan test
  env:
    DB_PORT: ${{ job.services.mysql.ports['3306'] }}
Copier après la connexion
  • Port codé en dur: Définissez explicitement le port (par exemple, 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
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal