viac verzii aplikacie nad jednym kodom – struktura rubrika: Programování: PHP

4 bazo
položil/-a 21.10.2014

ahoj,
momentalne riesim nasledujuci problem:

momentalne mame 3 oddelene verzie tej istej aplikacie, pre kazdu podporovanu krajinu jednu. spravil som jednu verziu ktora zahrna vlastnosti vsetkych doterajsich verzii.
a teraz potrebujeme tie 3 krajiny a dalsie, ktore pridu obsluhovat jednym kodom.

Kazda krajina ma vlastny config.neon kde su specificke nastavenia a potom config.local.neon kde su pripojenia do databazy
kazda krajina ma vlastnu db - z historickych dovodov

pre ostru prevadzku mame domeny konciace na .tld cize .sk, .de, .cz atd
ale na devel serveri mame url sk.domena.eu, cz.domena.eu atd
potom su tu este pocitace vyvojarov kde to moze mat kazdy inak, ja pouzivam system podobny develu

v root folderi projektu sa nachadza skript cli, ktory obsluhuje konzolove prikazy

a teraz sa konecne dostavam k otazke: ako poriesit adresarovu strukturu tak aby prevadzka a setup boli co najjednoduchsie?

podla mna su dve moznosti:

  1. nasmerovat kazdu domenu do rovnakeho www adresara - bud si podla nejakych regexov, ktore moc neviem, zistim o aku krajinu ide, alebo vytvorim pre kazdu krajinu zvlast index v tvare index_sk.php, index_cz.php atd, kde budu zadefinovane cesty ku konfigurakom ktore sa maju nacitat

vyhoda je - staci jeden deploy, logy na jednom mieste,
nevyhody - X verzii suboru index_krajina.php ked budeme pokryvat 20 krajin tak ich tam bude 20, takisto budem musiet mat 20 verzii cli skriptu aby mal spravne konfiguracne udaje

  1. deploynut kazdu verziu ako zvlast aplikaciu
    vyhoda - ziadne duplikovanie index.php a cli, jednoduchsie nacitanie konfigu pre krajinu(napriklad podla $ENV)
    nevyhoda - X instalacii, X deployov, logy na X miestach, mozem zabudnut pushnut hotfix do 1 z X verzii, zaberie to X krat viac miesta na serveri

ako riesite taketo situacie vy? existuju aj ine riesenia?

vopred dakujem za odpoved

Komentáře

  • arron : Píšeš, že používáš config.local.neon. Znamená to, že aplikace je napsaná v Nette? 22.10.2014
  • bazo : no jasne. preco? 22.10.2014
  • Kit : Kdybys napsal už v zadání, že je to v Nette, tak bych se to dál ani neobtěžoval číst. Ušetřil by sis zbytečné dohadování. 22.10.2014
  • bazo : a aky to ma na otazku vplyv? 23.10.2014
  • Kit : Má to vliv na odpovědi. 23.10.2014
odkaz
6 arron
odpověděl/-a 23.10.2014

Když je ta aplikace v Nette, tak bych to řešil tak, že bych pro každou jazykovou verzi měl zvláštní config (např. config_cz.neon), ve kterém jsou definované všechny specifické věci pro daný jazyk (databáze apod.) plus jeden config globální. V bootstrapu bych se rozhodl, který z nich (z těch jazykových) se má nahrát. Čili uplně v klidu jeden index.php, žádný problém. Daly by se tak vyřešit i specifické služby, které by byly definované v příslušném configu a jejich generické podoby (pro případy, že služba nepotřebuje být "lokalizována") v globálním configu. Když se config pro danou jazykovou mutaci nahraje jako první, tak by se pak služby definované i v tom globálním neměly přepsat, takže to bude fakt záležet jenom na tom, jestli bude služba definována v tom specifickém configu nebo ne (nebude se na ní dát zapomenout, bude vždy definována buď jazykově specifická nebo generická).

V další fázi je router, kde se dá nastavit nějaký parametr jazyka (možná už i v tom bootstrapu by se to dalo vyřešit, když už tam nějaký ten if nebo switch bude) a podle něho pak brát třeba šablony ze specifického adresáře (český třeba z templates_cz/template.latte atd.) s fallbackem na generický adresář (templates/template.latte). Stejně tak se to dá řešit se stylama, javascriptem (není problém přidat do šablony proměnnou s jazykem a podle toho nahrávat dané soubory, zase klidně s fallbackem).

Takže adresářová struktura klasická s tím, že minimálně adresáře se šablonami budou mít jazykový suffix.

Snad je tomu trochu rozumět :-)

Pro zobrazení všech 6 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.