Migrations Ambazo Hazitaharibu Production

Migration inafanya kazi vizuri kwenye mashine yako. Unaidishia (deploy) Ijumaa saa kumi na mbili jioni kwa sababu inaonekana ni ndogo. Kisha uwekaji (deployment) unakwama. Au mbaya zaidi, jedwali lenye mistari milioni 8 linajifunga (locks up) kwa sekunde 40 na tovuti yako inaporomoka.

Migrations hufanya kazi tofauti kwenye production. Database za ndani (local) huwa tupu na zina kasi. Database za production zina data halisi na watumiaji hai.

Fuata sheria hizi ili kuepuka majanga kwenye production.

  • Daima andika njia ya down inayofanya kazi Kila migration inahitaji kazi ya up na down. Kazi ya down lazima irudishe kazi ya up vilevile. Ikiwa huwezi kuandika rollback, migration yako ni ngumu mno. Ijaribu kwenye mashine yako kwa kutumia migrate ikifuatiwa na migrate:rollback kabla ya kuipakia (push).

  • Usibadilishe migration za zamani kamwe Unaweza kutaka kurekebisha ukubwa wa safu (column) kwenye faili la zamani la migration. Usifanye hivyo. Laravel haitairudia faili hilo kwenye seva. Badala yake, tengeneza migration mpya ili kubadilisha muundo. Migration ni historia ya mabadiliko. Unaongeza sura mpya badala ya kuandika upya sura za zamani.

  • Tumia nullable au thamani za kuanzia (default values) Kuongeza safu ya NOT NULL kwenye jedwali lenye data iliyopo husababisha makosa. Database haijui nini cha kuweka kwenye mistari ya zamani.

Tumia mbinu hizi badala yake: • Fanya safu mpya iwe nullable. • Weka thamani ya kuanzia (default value). • Ikiwa safu lazima iwe ya lazima, ifanye kwa hatua tatu: itengeneze kama nullable, jaza data, kisha ibadilishe kuwa NOT NULL.

  • Upotevu wa data ni wa kudumu Amri ya dropColumn hufuta data milele. Rollback inaweza kutengeneza upya safu, lakini data iliyomo ndani imepotea. Kabla ya kufuta safu (drop a column), hakikisha una nakala za akiba (backups). Njia salama zaidi ni kuacha kutumia safu hiyo kwenye kodi yako kwanza, subiri wiki chache, kisha iondoe kwenye database.

  • Tenganisha mabadiliko ya schema na mabadiliko ya data Kuendesha User::all() ndani ya migration kunaweza kupakia mamilioni ya mistari kwenye kumbukumbu (memory) na kuharibu uwekaji (deploy) wako. Ikiwa ni lazima ubadilishe data wakati wa migration, tumia chunkById ili kuchakata rekodi katika makundi madogo.

  • Tumia bendera ya force kwenye pipelines Pipelines za uwekaji wa kiotomatiki (automated deployment pipelines) zitakwama ikiwa Laravel itaomba uthibitisho. Tumia amri hii kwenye skripti zako za uwekaji: php artisan migrate --force

  • Tahadhari kuhusu ukwasi wa majedwali (table locks) Kubadilisha safu au kuongeza index kwenye jedwali kubwa sana kunafunga jedwali hilo. Hii husababisha muda wa kutofanya kazi (downtime). Kwa majedwali makubwa sana, angalia zana za mabadiliko ya schema ya mtandaoni (online schema change tools) au fanya mabadiliko wakati wa saa ambazo watumiaji ni wachache.

Orodha ya ukaguzi kabla ya kuipakia (push): • Je, njia ya down inafanya kazi? • Je, nilijaribu rollback kwenye mashine yangu (locally)? • Je, ninatengeneza migration mpya badala ya kuhariri moja ya zamani? • Je, safu mpya ni nullable au ina thamani ya kuanzia (default)? • Je, nina nakala ya akiba (backup) kabla ya kufuta safu (dropping columns)?

Chanzo: https://dev.to/denisgusto1/migrations-que-nao-quebram-em-producao-o-guia-que-ninguem-te-deu-363o