dynamický konfig databáze
- ondraLE
- Člen | 23
Mám dotaz na řešení: mám projekt, který chci převést do nette pro
více klientů, každý klient má svoji databázi s daty (struktura je
shodná),
zdrojový kód je jeden a klienta rozlišuji dle domény 3tí úrovně, např.
klient1.domena.cz, klient2.domena.cz.
Nyní dotaz:
je lepší pro každého klienta udělat vlastní konfig – např.
db-klient1.neon – kam dám jeho nastavení a na základě URI rozhodnu,
který z konfigu se vezme nebo pokud konfig db dám do centrální databáze
(takto nyní řešeno bez nette) – načtu opět dle prefixu domény parametry
pro mysqli_connect a dále pracuji už stejně.
Pokud bych se rozhodl pro cestu uložení dat do DB a nikoli vytvářením X
konfiguráků, jak nastavit container databaze bez .neon file?
Díky
O.
- Marek Bartoš
- Nette Blogger | 1274
I když máš kód jeden, nejjednodušší máš kód na server nahrát pro
každého klienta zvlášť. Nebudeš tak muset dělat nic jinak, než kdybys
měl klienta jen jednoho. Případný problém u jednoho klienta neovlivní ty
ostatní.
Nejen databáze, ale i data nahrávaná do složky s projektu by měla být
oddělená.
A kromě přístupu přes webserver bys musel řešit i přístup přes
konzoli. Integrace konzole orisai/nette-console sice umí přetížit aktuální
url skrze parametr commandu, ale je to pořád jen obezlička.
Kdybys chtěl i tak použít své řešení
- Vybrat neon na základě url adresy v bootstrapu ti bude fungovat, ale pro konzoli musíš použít onu obezličku s parametrem commandu.
- Připojovat se k databázi podle konfigurace z centrální databáze by též šlo, ale musel by sis nastavit databázové služby, které obyčejně registruje DatabaseExtension (klíč database v neonu) sám. Pro ten případ by šlo udělat službu, která se připojí k centrální databázi, získá login a vytvoří instanci Connection, kterou si pro další volání uloží do property. Nastavení Connection k databázi klienta tak, aby fungovalo automatické předávání závislostí by vypadalo nějak takto (píšu z hlavy, možná to není přesné):
services:
app.db.connectionAccessor: App\Db\ConnectionAcccessor
app.db.connection: @app.db.connectionAccessor::get()
Editoval Marek Bartoš (21. 1. 19:22)
- ondraLE
- Člen | 23
Diky @MarekBartoš , počet klientů se blíží stovce, pak jakoukoli
novou fci nebo opravu distribuovat mezi všechny kódy je fakt
zdlouhavé. Měl bys ještě chvilku více rozebrat možnost, jak nastavit
parametry pro databázi? Z toho příkladu to nechápu. Dejme tomu že mám
pole s dbName, dbUser a dbPass a tohle chci místo předání .neonem předat
jinak… Předem díky!
- dsar
- Backer | 53
ondraLE napsal(a):
Pokud bych se rozhodl pro cestu uložení dat do DB a nikoli vytvářením X konfiguráků, jak nastavit container databaze bez .neon file?
Díky
The use-case is a bit different but you may take inspiration:
https://forum.nette.org/…thentication
Just create a ConnectionFactory for custom database credentials
- ondraLE
- Člen | 23
Thanks dSar, I'll try using DI and services, but if it works for you, it might as well…
dsar napsal(a):
ondraLE napsal(a):
Pokud bych se rozhodl pro cestu uložení dat do DB a nikoli vytvářením X konfiguráků, jak nastavit container databaze bez .neon file?
DíkyThe use-case is a bit different but you may take inspiration:
https://forum.nette.org/…thenticationJust create a ConnectionFactory for custom database credentials