Ahoj Stando, rozumím. Pamatuju si sám sebe v minulosti. :-)

Nebuď ostražitý ke gitu. It's like UNIX - user friendly, just selective about who its friends are. :-)

Programátor se gitu nevyhne. Čím dřív se ho pořádně naučíš, tím líp. Ano, řádkový klient je z hlediska UX blbě navržený, místy neintuitivní. Ale celý je to stabilní a pomáhá to. Jen věnuj víc energie a času jeho používání. Bohatě se ti učení vrátí.

Tím neprosazuju svojí variantu d) níž. Byla by funkční, ale je neobvyklá a jen pro někoho. Uvedl jsem ji jako možnost.

Hlavní pro tebe je udržovat minimum rozdílů mezi verzemi, protože "bolesti" tvojí hlavy, kterou ti jejich TRVALÁ údržba způsobí, ti žádný klient nebude chtít zaplatit.

Nad každou výhybkou dobře přemýšlej, než jí zavedeš. Budeš s ní žít ty, ne klient. Velmi pomáhá mít zavedenou diskusi s klienty a tak, abyste spolu jednali jako partneři. Dokázat umravnit nebo i odmítnout klienta, který odmítá pochopit, že něco mít nebude nebo to bude mít draho, i když jemu to připadá easy a je to přece technicky zvládnutelné.

V.

On 12. 09. 20 12:20, Stanislav Vasko wrote:
Díky za podrobnou odpověď. Spoléhat na GIT se bojím, už jsem si s ním užil. Asi nejlépe mi zatím vychází ty výhybky (zatím). Dám si do settings jméno klienta a podle toho si udělám změny. Líbí se mi, že to budu mít pohromadě, ale dlouhodobě a při více klientech/změnách to bude asi dost hokej.

Moduly ad klient budou cesta, jakmile do toho někdo slápne více, zbytek poběží na "base". Dokumentace je základ, to je základ, píšu si i hromadu poznámek do kódu, jinak bych se zbláznil.

Díky, Standa

On 12 Sep 2020, at 02:11, Vladimír Macek <[email protected]> wrote:



Ahoj,

a) jedna z cest na začátku vývoje byla, že bys měl projekt koncipovaný jako multi-tenant, tzn. databáze a globální objekty (glob. objekty, cache, fajly, ...) by s izolací klientů počítaly. Pak bys to měl na jednu stranu jednoduché s údržbou. Bylo by ale neustále nutné hlídat tu izolaci a udržovat rozdíly ve funkčnostech.

b1) Když by funkčních rozdílů mezi doménami bylo míň, můžeš vyvíjet JEDEN projekt pro všechny, provozovat pro každého klienta extra instanci, ale z JEDNOHO branche. Funkční rozdíly mezi doménami by se rešily výhybkami v kódu.

Zdrojáky na serveru můžou být jen jednou, dokonce i virtualenv jen jeden, jen různé settings, databáze a file storage.

b2) Větší funkční oddělený celek, by se dal uzavřít do apky, kterou by v INSTALLED_APPS měli jen příslušní klienti. Pozor, stále se z ní dá importovat.

c) Silnější varianta je udržovat takovou per-instance apku jako separátně instalovanou jen do virtualenvu příslušného klienta. Pak by importovatelná nebyla, ale pro klienty bys již musel udržovat oddělené virtualenvy.

Zde bych jit doporučil nástroj na automatický deployment, například Ansible. Nedávno jsem ho zavedl do svého toolsetu a je opravdu fajn. Deployneš novou verzi všem najednou, klidně s customizacemi.

d) Může tě zaujmout ještě další varianta: Společnou část projektu bys udržoval v hlavním git branchi, třeba 'prod' (jako produkční). A pak bys pro klienta požadujícího změnu vytvořil branch 'prod-klient1', ve které by oproti 'prod' byly změny, které tento klient chtěl.

Vývoj a bugfixy společných částí bys pushoval do 'prod' a hned mergnul do všech 'prod-*' branchů. Abys nezapomněl, můžeš si nastavit různé git hooky -- jen varovací nebo i blokující, že třeba nepushneš 'prod-*', pokud jsi do něj zapomněl mergnout 'prod'.

Chce to jenom větší sebekázeň, ale git je na souběžný vývoj přímo dělaný. Výhody jsou, že git ti vždycky krásně zobrazí diffy mezi společnou verzí a klienty i mezi klienty navzájem. U žádného klienta není kód navíc. Nespolečné commity si navždy ponesou své messages, kde svému budoucímu já podrobně vysvětlíš, proč existují. To se u výhybek ne vždy daří. Viděl bych i omezený dosah chyb v 'prod-*' brenčích. Další výhoda mě napada, že když při mergi do 'prod-*' dojde někde k průniku změn (nechci říkat přímo kolizi), přiměje tě to k úvaze, jestli dělení funkčností koncipuješ dobře.

Ansible ti opět na jediný příkaz deployne do virtualenvů všech klientů, každého z příslušného branche gitu.

V každém případě si veď dokumentaci kdy, kdo, chtěl jakou změnu, proč ji chtěl, jak jsi s ním o úpravě diskutoval. Tvým zájmem je mít rozdíly v kódu mezi klienty co nejmenší.

Měj se, ať to jde,

Vláďa
tel. 608 978 164


On 12. 09. 20 0:25, [email protected] wrote:

Zdravím,

potřeboval bych poradit či navést na best-practice v Django, jak jeden projekt nasadit pro více firem, ale tak, abych v čase mohl dělat klientské modifikace. Aktuálně jsem vymyslel aplikaci a používají ji 2 moji klienti. Django aplikace běží na nGinx a abych mohl obě aplikace aktualizovat současně, na serveru jsem nalinkoval společné zdrojové kódy (virtuál linkuje společné adresáře/aplikace). Vše běží, protože každá aplikace má svou konfiguraci a svou databázi. Pokud aplikaci vylepším, nahraju ji na 1 místo, restartuji server či oba virtuály a oba klienti frčí na aktualizacích.

Nicméně: jak nejlépe postupovat, pokud např. 1. firma bude chtít nějakou změnu v šabloně, 2. firma například upravit či přidat celou funkčnost. Rád bych udržel zdrojový kód jednotný s nějakými "odbočkami" pro konkrétního klienta, ale nemohu najít jak nejlépe a nejsystémověji se tomu postavit, aby projekt byl dlouhodobě spravovatelný, zvlášť pokud by přibylo klientů.

Věřím, že existuje nějaké systémové řešení, budu rád i za navedení či odkaz na nějaký tutorial. Předem díky!
--
--
E-mailová skupina [email protected]
Správa: http://groups.google.cz/group/django-cs
---
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „django-cs“ ve Skupinách Google. Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu [email protected] <mailto:[email protected]>. Chcete-li tuto diskusi zobrazit na webu, navštivte https://groups.google.com/d/msgid/django-cs/f508f99c-c9d9-46c4-9ce3-102506cd4634n%40googlegroups.com <https://groups.google.com/d/msgid/django-cs/f508f99c-c9d9-46c4-9ce3-102506cd4634n%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
--
E-mailová skupina [email protected]
Správa: http://groups.google.cz/group/django-cs
--- Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete 
e-mail na adresu [email protected].
Chcete-li zobrazit tuto diskusi na webu, navštivte 
https://groups.google.com/d/msgid/django-cs/59056080-7386-f594-dabb-8a40612da9ba%40sandbox.cz.

Reply via email to