So beheben

Karen Carpenter
Karen CarpenterOriginal
2025-03-06 02:29:12654Durchsuche

How to fix

GitHub -Aktionen rationalisieren die kontinuierliche Integration (CI) für Github -Repositories. YAML -Workflow -Dateien automatisieren Aufgaben wie Tests und Bereitstellung. Eine übliche Laravel/MySQL -CI -Haken ist der Fehler "SQLState [Hy000] [2002] -Fehler", der häufig während anfänglicher Testmigrationen auftaucht. Dieser Artikel untersucht drei häufige Ursachen und ihre Lösungen.

Ein gültiger GitHub -Aktionen Workflow (Beispiel)

Vor der Fehlerbehebung untersuchen wir einen funktionalen Laravel/MySQL -Github -Aktionen Workflow:

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. Falscher MySQL -Port

Der häufigste Schuldige: nicht übereinstimmende Portnummern. GitHub -Aktionen weist dem Service Container 3306 einen zufälligen Port zu.

  • Dynamischer Port: Zugriff auf den zugewiesenen Port mit ${{ job.services.mysql.ports['3306'] }}:
  • auf den zugewiesenen Port zugreifen
- name: Run tests
  run: php artisan test
  env:
    DB_PORT: ${{ job.services.mysql.ports['3306'] }}
  • hartcodierter Port: Definieren Sie den Port (z. B. 33306) sowohl im Workflow als auch im .env.ci.
  • explizit

2. Fehlende MySQL -Dienst

Die Definition services übersehen ist eine häufige Aufsicht. Der obige Workflow zeigt die korrekte Aufnahme. Ohne sie schlägt die Verbindung fehl.

3. MySQL Nichtverfügbarkeit

Auch wenn ein Dienst definiert ist, ist MySQL möglicherweise nicht sofort reagiert. Der Parameter options in der mysql -Servierungsdefinition ist entscheidend:

options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

Dies stellt sicher, dass der Workflow wartet, bis MySQL vor dem Fortfahren fertig ist. Ohne dies können Tests vorzeitig ausgeführt werden, was zum Verbindungsfehler führt.

Schlussfolgerung

Diese Anleitung deckt drei Hauptgründe für den Fehler "SQLState [Hy000] [2002] abgelehnt" Fehler in Github -Aktionen Laravel/MySQL -Workflows ab. Adressierung von Port -Zuordnung, Servicedefinition und MySQL -Bereitschaft sorgt für glattere CI -Prozesse. Betrachten Sie für die Produktionsanwendungsstabilität eine robuste Fehlerüberwachungstools wie HoneyBadger, die sich gut in Laravel integrieren.

Das obige ist der detaillierte Inhalt vonSo beheben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn