Jedna z nejvetsich vyhod Djanga je jeho rozsahly ekosystem. Jak uz tady psalo nekolik lidi tak tohle je vyreseny problem. Nez vymyslet vlastni reseni, doporucil bych sahnout k nejake existujici sablone. Ja mam treba rad https://github.com/pydanny/cookiecutter-django ze ktere jsem odvodil i svuj soucasny velky projekt. Resi vsechno vcetne nasazeni do dockeru pokud o to budes stat.
Honza Král E-Mail: honza.k...@gmail.com Phone: +420 606 678585 On Mon, Feb 22, 2021 at 4:30 PM Radim Novotny <novotny.ra...@gmail.com> wrote: > Já mám součástí deploymentu (Ansible) nastavení environment var, která > obsahuje cestu, kam se to celé nainstalovalo. > Ostatní settings se odvozují od toho, takže třeba > > PROJECT_ROOT = os.environ.get('DJANGO_PROJECT_ROOT') > STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') > > Navíc tam je i kontrola, aby to fakt bylo nastavený, takže v settings.py > je > if not PROJECT_ROOT: > raise ImproperlyConfigured('Environment variable DJANGO_PROJECT_ROOT > is not defined.') > > Neřeší se, kde je nainstalovaný samotný kód aplikace (python package), > jestli je to venv/src/ nebo venv/lib/python. To mne už samořejmě nezajímá. > Pokud by mne to zajímalo, použiju __file__. > > Co se týká rozdělení settings, tak je fakt, že jich mám hodně a postupně > se importují. Deployment je zatím vždy na Debian a development je na > Dockeru, takže je to takový šroubovaný, ale všechno je to podchycené buď v > Ansible deploymentu a nebo v konfiguraci Dockeru. > > Možná ale vlastně potřebuješ úplně něco jinýho :) Přiznávám se, že jsem se > v tom moc nezorientoval. > > Radim > > On Mon, Feb 22, 2021 at 4:04 PM Jakub Vysoky <jakub.vys...@gmail.com> > wrote: > >> Spis pouzij `__file__` >> >> V `settings.py` si z toho udelat `BASE_DIR` jak pises. `PROJECT_NAME` >> bych ja osobne spis napsal natvrdo, nez takhle magicky odvozoval. >> >> Na zorganizovani Django settings je vicero projektu a ja momentalne >> nejsem Django mega aktivni, takze nebudu konkretni doporucovat. >> >> On Mon, Feb 22, 2021 at 3:22 PM MirekZv <mirek.zvol...@gmail.com> wrote: >> >>> Závěr: Nakonec jsem se příliš bál toho `os.getcwd()` a udělal jsem si >>> tuto funkci: >>> ``` >>> import inspect >>> import os >>> from pathlib import Path >>> >>> def get_project_root(): >>> for prg in inspect.stack()[::-1]: >>> prg = prg.filename >>> if '/wsgi.py' in prg or '/asgi.py' in prg: >>> return Path(prg).parent.parent >>> elif '/manage.py' in prg: >>> return Path(prg).parent >>> else: >>> return Path(os.getcwd()) >>> >>> BASE_DIR = get_project_root() >>> PROJECT_NAME = BASE_DIR.name # to make some settings portable >>> (DATABASES=..) >>> PROJECT_DIR = BASE_DIR / PROJECT_NAME >>> ``` >>> >>> Dne pondělí 22. února 2021 v 15:18:01 UTC+1 uživatel MirekZv napsal: >>> >>>> @Honza, @starenka >>>> >>>> Ahoj chlapi, především díky za vlídné a věcné odpovědi, čekal jsem >>>> spíš, že po této otázce už na mě někdo vlítne a pěkně mi vynadá. >>>> >>>> Jo, máte přesně pravdu, bylo by to asi lepší (získat to v umístění >>>> projektu a předat to nějakým parametrem), než účelu nepřiměřené úsilí, co >>>> se s tím snažím dělat. >>>> >>>> Přidám nějakou story, jak jsem se do té situace dostal, snad z toho >>>> bude něco jasnější, i když osobně jsem nad svým postupem dost na rozpacích: >>>> >>>> 1. Nejdřív jsem copy/pastoval ze starého projektu pro vytvoření nového, >>>> jak se to asi běžně dělá. >>>> 2. Pak jsem začal myslet na nějaký reuse, tak jsem si udělal jednu >>>> django aplikaci na věci, které by asi byly potřebné ve 2+ projektech. >>>> 3. Pak mě začalo štvát, že tu aplikaci mám pod jednotlivými projekty, >>>> takže když ji někde změním, neměl bych zapomenout jít i do těch ostatních >>>> projektů a udělat v ní stejné změny i tam. >>>> 4. Pak jsem tu django aplikaci obecností odkopíroval do adresáře mimo, >>>> udělal jí vlastní git repozitář, a instaluji ji nějak jako `poetry add >>>> ../../obecna` >>>> 5. Pak mě začalo štvát, že běžná django settings mají tak 200 řádek >>>> kódu, stejně jsou vždycky skoro stejná, a když tam něco vylepším, tak zas >>>> abych šel po projektech a implementoval vylepšení i do ostatních (a nebo v >>>> tom měl chaos). >>>> 6. Pak jsem si zkusil jakési django-split-settings, rozdělil ten >>>> mega-file na 10 malých (vypadá to dobře, ale o vhodnosti tohoto mám velké >>>> pochyby, protože to už jsme možná trochu u zacházení s jmennými prostory >>>> jako ve Web2py). >>>> 7. Pak jsem většinu nastavení přepsal tak, aby byla obecná, bez >>>> závislostí na projektu. Příklad: Nemám důvod, proč by se moje postgres >>>> databáze neměla jmenovat stejně jako projekt. Tak proč psát do nastavení >>>> natvrdo jméno databáze? - toto je další věc, kterou na Djangu nemám rád, že >>>> když dělá startproject, tak rozkopíruje po x souborech na y míst jméno >>>> projektu jako string. >>>> 8. Pak jsem (ze stejných důvodů jako výše) to odsunul mimo ty mé >>>> projekty. >>>> >>>> Takže: mohl bych si to nastavit v projektech a předat jako parametr. >>>> Ale čím míň toho zůstane customizovaného pro projekty, tím lépe. >>>> Navíc to django-split-settings se volá pomocí jakýchsi funkcí include() >>>> a optional() a nejsem si tak úplně jistý, jak snadno tam jdou parametry >>>> předávat. >>>> >>>> Dne pondělí 22. února 2021 v 14:58:03 UTC+1 uživatel MirekZv napsal: >>>> >>>>> @John >>>>> >>>>> Jo, zase jsem horlivější než je vhodné. >>>>> Nemyslel jsem to tak, že já sám chci mít na stagingu/produkci/.. různá >>>>> prostředí. >>>>> Myslel jsem to tak, že kdyby se to někdy z nějakých nyní neznámých >>>>> důvodů ocitlo pod jiným prostředím (např. na různých cloudech), aby to >>>>> chodilo. >>>>> Čili přehnaná snaha o obecnost, která se nakonec skoro vždycky spíš >>>>> vymstí. >>>>> >>>>> Jinak vyvíjím i nasazuji na poslední Debian, takže vlastně skoro >>>>> identické prostředí na vývoji i produkci. >>>>> Díky tedy za doporučení dockeru, já už jsem si s ním kdysi pohrával, >>>>> ale zjistil jsem, že pro laika to zas tak ultrasnadné není, >>>>> pak se mi zdá, že to docela žere místo na disku (zvlášť když tam >>>>> zapomeneš něco nesmazaného z předchozích pokusů), což při nasazování na >>>>> (cizí=veřejný) virtuální server je dost zásadní, >>>>> a pak, když to jedu vše na Debianu, tak by ten přínos zas tak zásadní >>>>> nebyl. >>>>> Takže Docker je zatím odložen. >>>>> >>>>> Dne pátek 19. února 2021 v 22:59:35 UTC+1 uživatel starenka napsal: >>>>> >>>>>> A kdyz to teda volas z toho prokektu, proc to ty fci v tom modulu >>>>>> nepredas jako arg? >>>>>> >>>>>> >>>>>> On Fri, Feb 19, 2021, 22:51 Jan Bednařík <jan.be...@gmail.com> wrote: >>>>>> >>>>>>> A nemůžeš mít název toho projektu jako konstantu přímo v settings? >>>>>>> Zjišťovat to z názvu adresáře mi přijde příliš křehké. >>>>>>> >>>>>>> A Sites znáš? to je takovej dobrej způsob, jak pracovat s více >>>>>>> projekty / instalacemi / weby v jedné code base: >>>>>>> https://docs.djangoproject.com/en/3.1/ref/contrib/sites/ >>>>>>> >>>>>>> Honza >>>>>>> >>>>>>> pá 19. 2. 2021 v 19:50 odesílatel Jan Walter <jnw...@gmail.com> >>>>>>> napsal: >>>>>>> >>>>>>>> Asi nejsem sto se přesně naladit na charakter Tvého problému, ale >>>>>>>> pokud mohu poradit obecně, snažil bych se vystříhat tomu, aby "bylo na >>>>>>>> produkci pokaždé něco jinak". >>>>>>>> >>>>>>>> My v partě máme oblíbený docker, což je technologie využitelná >>>>>>>> např. na to, aby bylo, pokud možno, "všude všechno v základu stejně". >>>>>>>> Doporučuji Tvé pozornosti. >>>>>>>> >>>>>>>> John >>>>>>>> >>>>>>>> On Fri, 19 Feb 2021, 19:32 MirekZv, <mirek....@gmail.com> wrote: >>>>>>>> >>>>>>>>> Běží mi kód ve stacku projektu, >>>>>>>>> ale dotyčný soubor se nachází mimo adresář projektu. >>>>>>>>> Jak bych zjistil jméno projektu? >>>>>>>>> >>>>>>>>> Abych to trochu vysvětlil: >>>>>>>>> V běžných django settings se řeší přesně toto, co potřebuju, třeba >>>>>>>>> nějak přibližně takto: >>>>>>>>> BASE_DIR = Path(__file__).resolve().parent.parent >>>>>>>>> PROJECT_NAME = BASE_DIR.name >>>>>>>>> >>>>>>>>> Potřebuju totéž zjistit v souboru, který není v BASE_DIR. >>>>>>>>> A to tak, že nechci nic nastavovat nikde v souborech pod BASE_DIR. >>>>>>>>> >>>>>>>>> Napadají mě 2 možnosti: >>>>>>>>> - zjistit to nějak z inspect.stack() --ale nevím, jak to udělat >>>>>>>>> dost bezpečně >>>>>>>>> - vzít jenom os.getcwd() --za předpokladu, že mám úplně standardní >>>>>>>>> projekt, se stejným jménem rootu i adresáře projektu >>>>>>>>> >>>>>>>>> Zatím jsem se spokojil s tím posledním. >>>>>>>>> Myslíte, že by na to mohl být spoleh ve všech variantách na >>>>>>>>> produkci? >>>>>>>>> >>>>>>>>> Alternativně: Dá se nějak snadno zjistit z kódu settings file >>>>>>>>> (protože ten mám pod projektem; nebo prostě jakýkoli file, který je >>>>>>>>> bezpečně pod adresářem projektu (např. ve stacku mám jako první >>>>>>>>> manage.py, >>>>>>>>> jenže to asi na produkci bude pokaždé jinak). >>>>>>>>> >>>>>>>>> Díky, tedy kdyby někdo věděl. >>>>>>>>> >>>>>>>>> -- >>>>>>>>> -- >>>>>>>>> E-mailová skupina djan...@googlegroups.com >>>>>>>>> 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 django-cs+...@googlegroups.com. >>>>>>>>> Chcete-li tuto diskusi zobrazit na webu, navštivte >>>>>>>>> https://groups.google.com/d/msgid/django-cs/2c569772-cc17-437d-80ec-0411a0207c33n%40googlegroups.com >>>>>>>>> <https://groups.google.com/d/msgid/django-cs/2c569772-cc17-437d-80ec-0411a0207c33n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>> . >>>>>>>>> >>>>>>>> -- >>>>>>>> -- >>>>>>>> E-mailová skupina djan...@googlegroups.com >>>>>>>> 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 django-cs+...@googlegroups.com. >>>>>>>> Chcete-li tuto diskusi zobrazit na webu, navštivte >>>>>>>> https://groups.google.com/d/msgid/django-cs/CAK-vJU%3D6zQW99QbNdrXSC7jGxNVxEB7y39M%2BDYUi%3DJQMG_MwLA%40mail.gmail.com >>>>>>>> <https://groups.google.com/d/msgid/django-cs/CAK-vJU%3D6zQW99QbNdrXSC7jGxNVxEB7y39M%2BDYUi%3DJQMG_MwLA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>>> . >>>>>>>> >>>>>>> -- >>>>>>> -- >>>>>>> E-mailová skupina djan...@googlegroups.com >>>>>>> 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 django-cs+...@googlegroups.com. >>>>>>> >>>>>> Chcete-li tuto diskusi zobrazit na webu, navštivte >>>>>>> https://groups.google.com/d/msgid/django-cs/CAMmgUkNE8pvmhtkfV2VaN_cmzdB1WytZSMev-tbW9KyuBbOEog%40mail.gmail.com >>>>>>> <https://groups.google.com/d/msgid/django-cs/CAMmgUkNE8pvmhtkfV2VaN_cmzdB1WytZSMev-tbW9KyuBbOEog%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>> -- >>> -- >>> E-mailová skupina django-cs@googlegroups.com >>> 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 django-cs+unsubscr...@googlegroups.com. >>> Chcete-li tuto diskusi zobrazit na webu, navštivte >>> https://groups.google.com/d/msgid/django-cs/c00991f9-4c8c-49af-8b48-0a5a09865b68n%40googlegroups.com >>> <https://groups.google.com/d/msgid/django-cs/c00991f9-4c8c-49af-8b48-0a5a09865b68n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> >> >> -- >> Jakub Vysoky >> >> mob: +420 605 852 377 >> jab: jakub.vys...@gmail.com >> twit: https://twitter.com/kvbik >> >> -- >> -- >> E-mailová skupina django-cs@googlegroups.com >> 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 django-cs+unsubscr...@googlegroups.com. >> Chcete-li tuto diskusi zobrazit na webu, navštivte >> https://groups.google.com/d/msgid/django-cs/CAEO8NYxNcLRFtAL-LMLDjGL7q%3D1qLtm4nGYqO-2gP4HYScPFGg%40mail.gmail.com >> <https://groups.google.com/d/msgid/django-cs/CAEO8NYxNcLRFtAL-LMLDjGL7q%3D1qLtm4nGYqO-2gP4HYScPFGg%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- > -- > E-mailová skupina django-cs@googlegroups.com > 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 django-cs+unsubscr...@googlegroups.com. > Chcete-li tuto diskusi zobrazit na webu, navštivte > https://groups.google.com/d/msgid/django-cs/CADDKcsurJP0jNTR%2BckEF%2BiiyqgDryDcCZ-3kpcjWx_3bC7gBwg%40mail.gmail.com > <https://groups.google.com/d/msgid/django-cs/CADDKcsurJP0jNTR%2BckEF%2BiiyqgDryDcCZ-3kpcjWx_3bC7gBwg%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- -- E-mailová skupina django-cs@googlegroups.com 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 django-cs+unsubscr...@googlegroups.com. Chcete-li zobrazit tuto diskusi na webu, navštivte https://groups.google.com/d/msgid/django-cs/CADoCwr0sgvAMkJNANSWLM4U%3Db8oKdyKz7uWWPKhpYiJS9ZcTGw%40mail.gmail.com.