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.

Reply via email to