DB migrace (např. s Nextras/Migrations) – co, jak a proč?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
fary
Člen | 155
+
0
-

Ahoj, soráč :-D že se tak blbě ptám (jestli si už teď říkáte, proč se ten bl* nepodívá na google), ale prostě nechápu a nikde nemůžu najít uspokující odpověď, co jsou to ty DB migrace. K čemu je to dobré? Co se s tím dá všechno dělat? Jakým způsobem to může ovlivnit práci a vývoj aplikací? Ještě jednou se poníženě omlouvám. :-D

David Kudera
Člen | 455
+
0
-

No myslím, že je to hrozně super věc. Používám doctrine/migrations a je to fajn.. Prostě tak, jako se ti mění kód, tak se mění i databáze. Jenže co uděláš s takovou změnou? Co s ní udělají kolegové? Co se s ní udělá v produkci?

Např. chci přidat nový sloupec uživateli, třeba api token. Jednoduše mu v jeho entitě vytvořím novou property $apiToken a vytvořím novou třídu pro db migraci (nechám vygenerovat), např. migraci verze 6.. V ní mám 2 metody up a down. No a už jen v up napíšu kód (klidně obyč. SQL) pro přidání nového sloupce. V down metodě naopak napíšu kód na odstranění toho sloupce.

Jakmile tohle mám, tak tuhle změnu jednoduše commitnu a je to :-)

Kolega si stáhne změny a spustí migrace. Nemusím mu říkat, co má upravit někde třeba v admineru apod. Migrace zajistí, že máme oba správnou verzi databáze bez starostí. Pokud se potřebuju vrátit ke starší verzi, tak nechám db migrovat dolů (na to se použijí ty metody down). Takhle si potom můžu v gitu prohlídnout změny v db, což se třeba taky může hodit.

No a produkce je taky úplně bomba. Stačí si jen do deploy procesu hodit migraci databáze a web se zaktualizuje úplně sám i s databází.

Jiří Nápravník
Člen | 710
+
0
-

@DavidKudera muzes poradit jak pouzivat Doctrine Migrations? Pouzivam implementaci pres Kdyby. A ruha vec, tyhle migrace pokud mam jen tupy deploy pres FTP, jde je na produkci nejak rozumne spustit?

David Kudera
Člen | 455
+
+1
-

@JiříNápravník Když počkáš pár dní, tak o tom zkusím napsat nějaký „článek“ ;-) Taky to používám s Kdyby a je pravda, že ohledně migrations jsem docela dlouho bloudil.. Dokumentace nedokumentuje všechno, článků málo… Zrovna právě teď si balím věci, abych se zítra mohl přestěhovat, takže fakt až tak za pár dní.

Jinak osobně mám deploy z gitu, ale jestli používáš třeba ftp deploy od @DavidGrudl , tak mám pocit, že docela nedávno jsem někde zahlídl zprávu, že už by měl umět pouštět skripty na cílovým serveru. Přesně ale nevím, nikdy jsem to nepoužil.

Jo vlastně teď mě napadá, jestli jsi myslel třeba na hostingu a ne na VPS. Hm.. Tam nevím teda, i když snad by to mohlo být možný spustit ty migrace i přes skript, který se spustí na nějaké URL… Možná...... Asi… :-/

Jiří Nápravník
Člen | 710
+
0
-

@DavidKudera jasně počkám, článek by byl super. Myslím jen tupý hosting, nicméně i kdyby to nešlo na produkci, tak by mi stačilo i pro vývoj jenom…

hrach
Člen | 1844
+
0
-

@fary migrace jsou v podstate zmeny databaze ulozene ve verzovatelne podobe. Verzovatelne podoba je vetsinou nejaky kod (sql, nebo php, ktery treab to sql vygeneruje). Diky tomu pri deploy je mozne automaticky upravit db do stavu, kterou vyzaduje kod. Migrace muzou byt dopredne, ale i zpetne, tj. pri vraceni se v historii ti vytvori z aktualni db tu, aby kod fungoval.

Ad nextras migrations: to jsou migrace ulozene jako ciste sql. Tj. vytvoris soubor s sql, ktery upravuje db, a normalne ho commitnes spolu s kodem. Potom pri deploy staci zavolat nextras a ono ti spusti jen potrebne migrace. Mj. hlida konzistenci a tak. Neumi zpentne migrace (v 99 % nepotrebujes), ale ma pro to jiny mechanimus – tzv. reset. Ten spusti vzdy vsechny migrace od zacatku – to dava smysl a pouziva se pouze na localu. Kdyz si neco pokazis, nextras ti to dostane do stavu pred pokazenim.

castamir
Člen | 629
+
+1
-

Já osobně používám Phinx. Instalace pomocí composeru umožňuje takřka okamžitý start. Lze to napojit přímo na config.neon (teda spíše na config.local.neon). Lze také rozlišovat více „prostředí“ (např. úprava tabulek a číselníků může být v prostředí production, zatímco testovací data v dev apod.).

Čamo
Člen | 798
+
0
-

Prosím vás, ako je to s tým resetom v Nextras migrations? Ak sa s pustia všetky migracie znovu, tak to znamená, že sa musia pred tým všetky tabuľky dropnúť nie?

castamir
Nebol by nejaký článok o tom prepojení Nette a Phinxu?

Jan Tvrdík
Nette guru | 2595
+
0
-

@Čamo Ano, reset znamená, že všechno na začátku smaže.

potapnik
Člen | 127
+
+1
-

Phinx používám taky a zatím spokojenost :-) článek bych i sepsal, ale není čas…

Čamo
Člen | 798
+
+4
-

potapnik:
Tak ho napíšem ja.