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 zobrazit tuto diskusi na webu, navštivte 
https://groups.google.com/d/msgid/django-cs/CAEO8NYxNcLRFtAL-LMLDjGL7q%3D1qLtm4nGYqO-2gP4HYScPFGg%40mail.gmail.com.

Reply via email to