Wątek przeniesiony 2024-03-25 09:40 z Inne języki programowania przez Adam Boduch.

Błąd podczas wykonywania bin/console make:migration

0

Witam,
Od dłuższego czasu nie mogę sobie poradzić z tym problem. Utworzyłem projekt SYMFONY stworzyłem kontenery z serwerem CADDY ;PHP;MYSQL oraz dodatkowo symfony. Wszystkie są w tej samej sieci. Niby wszystko jest ok. łączę się z bazą danych z kontenera mysql jako root. Połączenie z bazą poprzez interface VS code jest też ok. Tworzę testową encję. Jednak gdy chcę wykonać migrację dostaję taki błąd

[critical] Error thrown while running command "make:migration". Message: "An exception occurred in the driver: SQLSTATE[HY000] [2002] Connection refused"

W logach nic konkretnego nie mogę znaleźć.
Czy ktoś może już spotkał się z takim błędem ?

0

Samo make:migration tylko tworzy migrację, nie wykonuje jej.
W przypadku problemu z połączeniem do DB z aplikacji do sprawdzenia pozostaje:
jaki plik env. używasz i czy masz w nim poprawne dane.
Skoro serwer odpowiada to komunikacja jakaś jest. Ale możesz np. mieć na bazie jakieś restrykcje co do adresów IP dla użytkownika.
Zacząłbym od plików .env

0
jurek1980 napisał(a):

Samo make:migration tylko tworzy migrację, nie wykonuje jej.
W przypadku problemu z połączeniem do DB z aplikacji do sprawdzenia pozostaje:
jaki plik env. używasz i czy masz w nim poprawne dane.
Skoro serwer odpowiada to komunikacja jakaś jest. Ale możesz np. mieć na bazie jakieś restrykcje co do adresów IP dla użytkownika.
Zacząłbym od plików .env

Oczywiście w pliku .env ma url z danymi zgodnymi z tym co jest w kontenerze

 DATABASE_URL="mysql://symfony:[email protected]:3306/symfony?serverVersion=8.0.32&charset=utf8mb4"

właśnie tego nie rozumiem , zdaję sobie sprawę że make:migration tworzy jedynie sql-a nie wykonuje migracji do bazy dlatego nie rozumiem tego błędu.
Próbowałem też na innych portach np 3307 ;3316 bez powodzenia.

0

A nie masz nadpisanych danych w innym pliku .env np .env.locale czy tak .env.dev ? W jakim trybie uruchamiasz aplikację?

0

Szukałem ale nie znajduję innego pliku env jest tylko jeden w katalogu głównym projektu (.env) . Uruchamiam w trybie developerskim.

0

Sprawdź uprawnienia dla danego usera.
https://stackoverflow.com/questions/16287559/mysql-adding-user-for-remote-access
Oczywiście nie musisz tworzyć nowego.
Bo w pierwszym poście pisałeś, że łączysz się jako root testowo. A tu masz innego użytkownika.

0
  1. kontenery masz lokalnie, czy na serwerze?
  2. komende do migracji odpalasz bedac w kontenerze czy poza?
0

Kontenery mam na Docker desctop komendę odpalam będąc wewnątrz kontenera php.
Wrzuciłem to na gita
https://github.com/EVOMARKET/projekt12.git

0

w takim razie musisz zmienic hostname w zmiennej srodowiskowej DATABASE_URL,

przykladowo majac kontenery:

  • caddy
  • php
  • db (ma uruchomiona baze danych na porcie 3306)

i jesli one sa w tej samej sieci, to wchodzac na kontener z php, aby moc polaczyc sie z kontenerem z db, hostname'em nie bedzie localhost ani 127.0.0.1 (poniewaz te sa z konteneru php), a hostname'em bedzie nazwa kontenera do ktorego chcesz sie polaczyc (np. db)

wiec zmienna DATABASE_URL powinna wygladac:

DATABASE_URL="mysql://symfony:symfony@db:3306/symfony?serverVersion=8.0.32&charset=utf8mb4"

dla testu mozesz sobie tez zawsze zrobic poleceniem curl czy jest polaczenie miedzy kontenerami:

curl -I http://db:3306

jak nie bedzie polaczenia (np network nie jest dobrze polaczony), to powinien byc blad: curl: (6) Could not resolve host:

0

Dziękuję za odpowiedź ale chyba niestety to jeszcze nie to
zmieniłem DATABASE_URL na

DATABASE_URL="mysql://symfony:symfony@db:3306/symfony?serverVersion=8.0.32&charset=utf8mb4"

Usunąłem obrazy dockera, zbudowałem i postawiłem na nowo. Wchodzę do kontenera php , podaję komendę

curl -I http://db:3306

i mam odpowiedź

curl: (6) Could not resolve host: db
0

zobacz jeszcze jaka masz nazwe kontenera z baza (polecenie docker ps), bo jesli odpalasz poprzez docker compose, to wtedy nazwa kontenera jest zazwyczaj nazwa_katalogu_nazwa_kontenera_w_docker_compose_1

0

Nazwę kontenera według wklejnoego na GH kodu masz:

 mysql:
    image: mysql:8.0

Zamiast db powinno być mysql.
Połącz się na roota tak jak łączysz się gdzieś indziej.

0

nie zauwayzlem linku do repo, sory

tak jak mówi @jurek1980 nazwa kontenera bedzie mysql, albo nawet w sumie projekt12_mysql_1 (popraw mnie jesli sie myle), wiec w env powinienes miec

DATABASE_URL="mysql://symfony:symfony@projekt12_mysql_1:3306/symfony?serverVersion=8.0.32&charset=utf8mb4

a image: mysql:8.0 wskazuje bazowy image skad ma brac, info o nazwie kontenera idzie linijke wyzej znalezc

  mysql: # <--
    image: mysql:8.0
0

Panowie nawet nie wiecie jak się cieszę. Jest success! Wielkie dzięki !! 😀

1 użytkowników online, w tym zalogowanych: 0, gości: 1