Drupal 8 weben telepített modul átalakítása Composer kezelésűvé

botond1977 képe

Sziasztok!

Egy meglévő Drupal 8-as oldalon (8.9.20) a legtöbb modult a webes felületen keresztül telepítettem az oldal pár éves fennállása során.
Időközben elkezdtem használni a Composert, és azóta ezzel is telepítem a modulokat, valamint az alaprendszert is ezzel frissítem.

Az lenne a kérdésem, hogy a korábban a webes felületen telepített modulokat hogyan tudom "átalakítani", hogy a Composer segítségével tudjam kezelni?

Ha csak simán telepítem Composerrel (is) a modult, akkor feltelepül ugyan, de az admin felület továbbra is a webes telepítésűt veszi figyelembe. Tehát ilyenkor mintha két modul menne párhuzamosan, amiből a webeset használná a rendszer. Mert a Composerrel telepítettet közben tudom frissíteni, stb, de a weben telepített modul verziója ilyenkor nem változik.

Már sok mindent átnéztem, köztük ezt is:
https://github.com/grasmash/composerize-drupal
De nekem ez nem működött. Megreccsent tőle az egész oldal. Drush is elszállt tőle.
Inkább egyesével bíbelődnék el a kérdéses modulok átalakításával.

Tehát a kérdésem az lenne, hogy van-e valami lehetőség, módszer arra, hogy kézzel egyes modulokat átalakítsak Composer kompatibilissé.

A másik kérdésem ehhez is kapcsolódik:
Ha nem megoldható a fenti kérdés, akkor az ilyen webes telepítésű moduloknál hogyan tudok átállni egy újabb branch használatára?
Sok modulnál már újabb branch-ek vannak, amik frissebbek. Viszont ha weben megpróbálom telepíteni, akkor kiírja, hogy a modul már telepítve van.

Tehát ez lenne a másik kérdésem.

A végső célom az oldal Drupal 9-es verzióra történő upgrade-elése, de előtte szeretnék rendbe rakni minden modult, hogy mindenből a legújabb branch/verzió működjön.

Előre is köszönöm a segítséget!

Drupal verzió: 
Balu Ertl képe

„[…] Ha csak simán telepítem Composerrel (is) a modult, akkor feltelepül ugyan, de az admin felület továbbra is a webes telepítésűt veszi figyelembe.”

Alapesetben nem fognak külön-külön létezni párhuzamosan modulok/sminkek, bármely módon (pl. kézzel FTP-n .tar.gz feltöltve, composer tette oda, ne adj' az ég a verziókövetődbe be vannak kommitolva külsős kódok, mindegy) is kerültek oda a {docroot}/modules vagy {docroot}/themes könyvtárakba. A Drupalnak csak az számít, hogy ott legyen a {modul_gepi_neve}/ könyvtárban a modul_gepi_neve.info.yml fájl.

„Tehát a kérdésem az lenne, hogy van-e valami lehetőség, módszer arra, hogy kézzel egyes modulokat átalakítsak Composer kompatibilissé.”

Magukkal a modulokkal semmit nem kell csinálnod, a composer is csak ugyanazokat a forrásfájljaikat teszi neked oda, amiket mondjuk egy .tar.gz-ből is kicsomagolnál.

„Sok modulnál már újabb branch-ek vannak, amik frissebbek.

Ebben a helyzetben az elsődleges cél az lehet, hogy első körben csak leírod a composer.json fájlban, hogy most mely modulok mely verziói vannak használva (kvázi ideiglenesen „konzerválod” a pillanatnyi állapotot), majd következő lépésként egy $ composer update --with-all-dependencies paranccsal felfrissíted őket a lehető legújabb verzióra.

Viszont ha weben megpróbálom telepíteni, akkor kiírja, hogy a modul már telepítve van.”

Igen, mivel ahogy írtam, ha már egyszer ott van a {modul_gepi_neve}/modul_gepi_neve.info.yml fájl, akkor már ő sem tudja „újra” odatenni :) Csak szól, hogy ez már telepítve van.

Összességében ha nem egy hatalmas bonyolultságú webhelyről van szó, akkor lehet, én a helyedben megfontolnám, hogy az alapoktól felépítek egy új projektet a drupal-composer/drupal-project repó alapján. Előnye, hogy előre kikövezi neked az utat a jövőre nézvést, neked csak az általad használni kívánt modulokat kell majd beigényelned ($ composer require drupal/modul_gepi_neve:'^x.y' parancs). Ha a végén minden Drupal-komponens (modul, smink) a helyére került, beletöltheted a régi webhely-konfigurációt és elvileg működni fog.

A hivatalos dokumentációnak ez a szakasza lehet hasznos a témádhoz.

0
0
botond1977 képe

Üdv!

Köszi a segítséget!

Amit írtál, kipróbáltam már azt is, hogy a composer.json fájlba is betettem a require részbe az adott modul aktuális verzióját, majd a composerrel frissítettem. A kimenetben szépen frissült is. A composer show is szépen mutatta az új branch-et és verziót. Majd ezután visszamentem az adminba, és ott ráfrissítettem, és ott továbbra is a régi verziót mutatta.
Ezért gondoltam, hogy valami párhuzamosság lehetett.

De akkor megpróbálom újra.

Sajnos nem tudom előröl kezdeni, mert már kb 4 éves aprólékos munka van az oldalban, így rengeteg plusz munka lenne újrakezdeni.

Megpróbálom a composer fájllal megint, aztán meglátjuk mi lesz.

0
0
botond1977 képe

Valahogy nem működik ez.
Például most kijött az Easy Breadcrumb 2.0.2 változata. Jelzi az adminban.
Nekem a 8x-1.15 van fent.
Upgrade-elni akarok az új branch-re.

Betettem a composer.json fájlomba a jelenlegi állapotnak megfelelő verziót:
[...]
"drupal/easy_breadcrumb": "^1.15",
[...]

Majd composer update. Szépen "fel is húzta".
composer show-ra mutatta is.
Majd frissítettem az új ágra:
composer require 'drupal/easy_breadcrumb:^2.0'
Frissült is, lekérdezésre mutatja is:
composer show "drupal/*"

[...]
drupal/easy_breadcrumb 2.0.2 Adds configuration to the system breadcrumbs.
[...]

Majd utána drush updatedb és drush cr.
Ezután visszamentem az adminba, és újra betöltöttem a frissíteni valók listáját, és ugyanúgy ott van ez a tétel:

"Easy Breadcrumb (Nem támogatott) 8.x-1.15 2.0.2 (Kiadási információk)
Ez a frissítés egy nagyobb verzióváltás, ami azt jelenti, hogy a mostani verzióval nem lesz visszafelé kompatibilis. Ilyen esetben ajánlott a kiadási információk szokásosnál alaposabb tanulmányozása és csak saját felelősségre frissíteni."

Tehát ez így nem működik.
Amit írtam korábban, hogy most az admin szerint van egy 8.x-1.15-ös változatú modulom, és a composer szerint meg van egy 2.0.2-es változatom.

Itt akárhogy is, valahogy párhuzamosan létezik két verzió a modulból.

Tehát a kérdésem továbbra is az lenne, hogy hogyan tudom "composerizálni" egyesével a modulokat? Mert ezzel a módszerrel nem történik semmi.

Vagy esetleg kihagytam volna valamit?

Előre is köszi a segítséget!

0
0
Balu Ertl képe

Ha jól értem a leírt lépéssort, akkor szerintem a Drupal „nem tud róla”, hogy egy telepített modulját (amiről a DB-ben azt hiszi, hogy még 8.x-1.15-ös verziójú) te közben a fájlrendszerben már kicseréltél egy újabb verzióra. Sem a $ drush updatedb (ami a kódban definiált adatbázis-frissítéseket futtatja le), sem pedig a $ drush cache-rebuild (kiüríti a gyorsítótárakat) parancsok nem érintik a telepített modulok nyilvántartását.

„Itt akárhogy is, valahogy párhuzamosan létezik két verzió a modulból.”

Ezért lehet az az (egyébként jogos) érzésed, mintha párhuzamosan léteznének:

  • Adminfelület (aktív konfig a DB-ből) szerint: 8.x-1.15
  • Composer (fájlrendszerből) szerint: 8.x-2.x

Egy adatbázismentés után én megpróbálnám ki-be kapcsolni a modult (vagy ha van fent Devel, akkor az egy lépésben is tudja reinstallálni).

0
0
botond1977 képe

Közben most ugortt be, hogy mitől lehet ez a "párhuzamosság"
A weben telepített modulok a modules könyvtárba kerülnek, míg a composerrel telepített modulok a modules/contrib könyvtárba.
Most összehasonlítva pontosan ott van az összes composerrel telepített modulom.
Tehát ezért léteznek ezek párhuzamosan.

Közben tegnap sikerült upgradelni Drupal 9-re, működik is az oldal, de még továbbra is van pár olyan modul, amiket anno az adminból telepítettem fel, és van már neki újabb branch-je, de még nem ajánlja a frissítőben a telepítését, csak említi hogy van. Tehát nem jelennek meg a jelölőnégyzetek. Ezeknél a moduloknál a projekt oldalakon ugye még ott a zöld háttéren a kis pajzs ikon, hogy még élő és biztonságos ág, viszont én mégis szeretném upgradelni őket, nem akarom megvárni, míg ezek is elavulttá válnak, és akkor majd előkerülnek a checkboxok, és akkor már engedni fogja őket frissíteni.
Szóval már csak kíváncsiságból is utána szeretnék járni, hogy hogyan lehet ezeket átpakolgatni a composer kezelése alá. Nyilván a modul fizikai átmásolása a contrib alá az felejtős, mert akkor meg nem találja az eredeti modult, így ilyesmivel nem is próbálkozom.

Ha meg kikapcsolom a modult, akkor meg leszedi az összes beállításait is. Ez egy egyszerűbb modulnál nem is lenne gond, hogy kikapcsolom, törlöm, majd composerrel újra felrakom, de egy sok beállítást tartalmazó modulnál már neccesebb.
Tehát még keresgélem a megoldást erre.

0
0