Címkék: #Cloud #Heroku #Laravel #Laravel 9 #MySQL #Publikálás (Deployment) #Telepítés (Installation)
Legutóbbi bejegyzés a Heroku használatáról, ebből fogok most kiindulni a bővítés előtt: https://attila.gludovatz.hu/posts/laravel-alkalmazas-telepitese-a-heroku-felhorendszerebe
MySQL használatához egy kiterjesztés szükségeltetik, ami a ClearDB MySQL: https://elements.heroku.com/addons/cleardb
Az iménti linkre kattintva betöltődik egy oldal, ami a ClearDB MySQL kiterjesztésre viszi a felhasználót (fejlesztőt). A telepítéshez be kell jelentkezni az oldalra a Heroku-s felhasználónkkal jobb felül "Log in".
Bejelentkezés után kattinthatunk az "Install ClearDB MySQL" gombra jobb felül. Kipróbáláshoz elég az ingyenes "Ignite" nevű csomagot választani, ami 5 MB-ot engedélyez nekünk.
Utána jöhet az "App to provision to" mező kitöltése, amelybe ha elkezdjük beírni a saját alkalmazásunk nevét, akkor ki tudjuk választani azt, amelyhez csatolni szeretnénk a MySQL adatbázist.
Az alkalmazás kiválasztása után ezt a képet kapjuk (az én alkalmazásom neve powerful-meadow-28960). Utána alul megnyomhatjuk a "Submit Order Form" gombot.
Bár a szolgáltatás ingyenes, a telepítéshez mégis kérte tőlem a bankkártya adataimat, amit meg is adtam, így utána már működött is kattintással a kiegészítő telepítése.
Ahogy az látható az iménti ábrán, sikeresen települt, a bővítmény használatához pedig a "Dev Center"-t (dokumentációt) javasolja az értesítés.
Megpróbálhatjuk "átcsatolni" a fenti kép szerint a ClearDB MySQL-re az alkalmazásunkat, viszont nem biztos, hogy működni fog így rögtön és simán. Nálam előbb le kellett választani a "Heroku Postgres"-t az alkalmazásról. Leválasztás terminal-ban:
heroku addons:detach DATABASE -a powerful-meadow-28960
Utána pedig törölnöm is kellett ezt az adatbázist, mert az alkalmazás beállításai között van egy paraméter (DATABASE_URL), amit nem engedett sem szerkeszteni, sem törölni, amíg létezett ez a "Heroku Postgres" adatbázis.
heroku addons:destroy heroku-postgresql:hobby-dev
Megerősítéshez meg kellett adnom az alkalmazásom nevét (powerful-meadow-28960).
A következő utasításhoz sajnos nem jó a sima Windows-os terminal vagy parancssor. Ehhez inkább javaslom a Git Bash alkalmazást (vagy egy WSL terminalt, ha van a gépünkön ilyen). Megnyitás után navigáljunk el az alkalmazásunk projekt mappájába és adjuk ki a következő parancsot:
heroku config | grep CLEARDB_DATABASE_URL
Eredményül megkapjuk a CLEARDB_DATABASE_URL-t, aminek az értékét másoljuk ki, mert a következő utasításhoz szükség lesz rá:
heroku config:set DATABASE_URL='mysql://b1983a29ef1764:a5b954af@us-cdbr-east-05.cleardb.net/heroku_516551b3b0a324e?reconnect=true'
Így összekötöttük a Heroku-ban lévő alkalmazásunkat az új ClearDB MySQL adatbázissal. Jöhet a migrálás:
heroku run php artisan migrate --force
Itt viszont kapunk egy hibaüzenetet, ami már ismerős lehet a számunkra korábbról, és egyben jelzi nekünk azt is, hogy már ténylegesen MySQL adatbázissal van dolgunk:
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))
Ezt egy módosítással tudjuk orvosolni az app/Providers/AppServiceProvider.php fájlban. A boot() függvény magjához adjuk hozzá ezt:
Schema::defaultStringLength(191);
Természetesen ezt importáljuk is be a fájl elején:
use Illuminate\Support\Facades\Schema;
Mentsük el, és következhet a feltöltés git-tel és visszatérhetünk ehhez a Windows-os terminalba:
git add .
git commit -m "mysql-specific 1071 error - fix"
git push heroku master
Majd utána már tudjuk újra migrálni (fresh!):
heroku run php artisan migrate:fresh --force
Működik is! De azért legyünk gyanakvóak és ellenőrizzük le:
Én a web.php-hoz hozzáadtam egy új útvonalat, amivel tudjuk csekkolni az adatbázisunkat:
Route::get('/d-tables', function () {
return dd(
DB::select("show tables")
);
});
Ezután viszont a fenti git-es parancsokat újra ki kell adnunk, természetesen a commit "message" részét írjuk át arra, hogy mondjuk "added mysql-specific route", és a git push után már tesztelhetjük is a böngészőben:
Tipp: ha 500-as hibát kapnánk, akkor a Heroku-s változókhoz adjuk hozzá az APP_DEBUG változót és állítsuk az értékét true-ra (menedzselő felületen Config Vars részen), így beszédesebb hibaüzeneteket kaphatunk. Amikor pedig már minden jól működik, akkor változtassuk vissza false-ra, vagy egyszerűen töröljük ezt a változót (alapértelmezetten mivel itt "production" környezetben vagyunk az értéke false).
És ne feledjük, ez az 5 MB-os ClearDB MySQL kiterjesztési terv arra elég, hogy kipróbáljuk a működését, ha pedig fontos projekten dolgozunk, akkor elgondolkodhatunk, hogy az "Ignite" ingyenes csomag helyett más tervet válasszunk a ClearDB ajánlatai közül.
További Heroku kiterjesztések itt érhetők el: https://elements.heroku.com/addons
A ClearDB MySQL kiterjesztés használatára a javaslatot hallgatóm, Bagi Miklós László "Milász" adta, amit ezúton is köszönök neki.