dynamický konfig databáze

ondraLE
Člen | 23
+
0
-

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 | 1260
+
0
-

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
+
0
-

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
+
+1
-

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
+
0
-

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í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