nfqakademija / kickstart

OFFICIAL NFQ Academy Symfony 4 start project setup with the included docker local dev env.
4 stars 68 forks source link

Dažniausios klaidos su MySql #26

Closed aurelijusb closed 5 years ago

aurelijusb commented 6 years ago

Testuojama ne ta duomenų bazė

mysql -uroot -h127.0.0.1 --port=3306 -p

Bet dokumentacijoje specialiai padaryta su 330 7:

mysql -uroot -h127.0.0.1 --port=3307 -p

Kad naudotų dockeryje esantį MySql'ą ir jis nesikirstų su įdiegtų per apt-get install ar pan.

Kaip patikrinti:

Komandos paleidžiamos prod / dev konteineriuose

Pakeičiamas DATABASE_URL reikšmė .env faile, bet bin/console vis tiek meta klaidas Yra skirtumas tarp dev ir prod ir ci.nfqakademija.lt:

docker exec -it php.symfony bash
docker exec -it prod.php.symfony bash

Vienur imama iš .env, kitur įmituojamas padavimas per nginx/environment

Keliant į akademijos serverius, .env failas pakeičiamas jau sugeneruotų. Jei reikia papildomų pakeitimų (magiškai iš .env.dist nepaima), tai reikia per SSH prisijungti prie akademijos serverių

Kaip patikrinti:

Pakeitimai išmėtyti per .env, site.conf ir docker-compose.yml

Pakeitimai .env faile neatsinaujina neperkrovus docker konteinerių :beetle:

docker-compose perduoda APP_ENV kitmaąjį iš .env, bet (index.php)[https://github.com/nfqakademija/kickstart/blob/master/public/index.php#L11] ima duomenis iš .env tik kai nėra nustatytas APP_ENV

Apėjimas:

Dėkui @xeriaz už surastą klaidą

Yra daug vietų, kur keisti konfigūraciją – gal galima sugeneruoti :bulb:

Dabar DATABASE_URL=mysql://root:p9iijKcfgENjBWDYgSH7@mysql.symfony:3306/symfon yra tiesiog copy-paste docker-compose.yml, .env.dist ir site.conf failuose

Įmanoma būtų padaryti --endpoint script'ą, kad sugeneruotų reikiamus parametrus į environment ir nginx. Pradinė idėja buvo – su kodo generavimu bus per daug magijos – bet su copy-paste yra per daug klaidų.

aurelijusb commented 5 years ago

Daugiau automatizacijos – reiškia daugiau kodo – bandysiu iškelti sudėtingas dalis į https://github.com/nfqakademija/docker, kad liktų daugiau pačio Symfony kodo

aurelijusb commented 5 years ago

.env parametrai produkcinėje aplinkoje turėtų būti dedami į nginx ir ~/.bashrc, nes skaityti iš env yra greičiau nei iš failo, ypač kai eina 200 užklausų per sekundę. Bet tai apsunkina programavimo aplinkos paruošimą: :orange_book: Reikia sekti, kad egzistuoja ir kada pakeistas .env :orange_book: Reikia generuoti nginx konfiguraciją ir perkrauti ją, kai yra pakeitimai (nesinori ant NFQ Akademijos serverio tai daryti su kiekvienu studento noru, nes vieno failo klaidos blokuos pakeitimus kitiems) :orange_book: Nepavyko automatizuoti ir su docker//bash magija (CMD while [ true ]; do if [ -f /code/.env ]; then $(cat /code/.env | grep -v "#" | grep "=" | sed 's/^/export /'); fi; sleep 1; done & php-fpm), kad su docker exec -it php.symfony bash parametrai būtų uždėti. Reikėtų atskiro wraper'io pačiam docker exec :orange_book: Bandant magiją su lua+nginx irgi būtų sunku, nes reikėtų specialiai sukompiliuotos nginx versijos, bet tai moko blogų praktikų – į produkcinę aplinką niekas nedėtų LUA, kuris su kiekviena užklausa skaitytų .env (PHP gal net greičiau veiktų dėl opcache ar pan.)

Taigi, liekama tiesiog su .env failu ir jo iškėlimu iš require-dev į require – be jokių parametrų iš env ar iš fastcgi_param.