Ubuntu

Ubuntu 20.04, WSL2, VSCode és Drupal 8 - A „Gotchák” javítása

Ubuntu 20.04, WSL2, VSCode és Drupal 8 - A „Gotchák” javítása

A Microsoft végre fantasztikus megoldást nyújtott a Linux-alkalmazások fejlesztésére Windows rendszeren.  A Windows alrendszert Linuxhoz, a WSL2-t meglehetősen könnyű telepíteni, elindítani és futtatni, különösen, ha már ismeri a Linuxot.  Még akkor is, ha nem az, sok nagyon jó cikk szól arról, hogy egy alap telepítés beindul-e.

A Linux PHP-alkalmazások VSCode használatával történő fejlesztése a Windows 10 rendszeren körülbelül ugyanolyan stabil és zökkenőmentes élmény, amilyet kaphat. Mégis, számos olyan „getchát”, amelybe belefutottam, nem írtam le egyetlen cikkben sem, amelyet a LAMP Ubuntu és WSL2 rendszeren való beállításáról találtam.

Korlátozott tapasztalatom volt a Linux-ról, és nagyban függtem azoktól a cikkektől, akik előttem jöttek.  Noha az út nagy részében eljutottak hozzám, több problémába ütköztem a Drupal 8 hibamentes futtatása és a VSCode-ban történő hibakeresés közben.  A megoldásokat az interneten feltett kérdések megjegyzés-szakaszaiban találták meg. Ez sok órás keresést tartott, és remélem, hogy megmenthetem az embereket azáltal, hogy bemutatom az ebben a cikkben talált megoldásokat.

A környezetem a Windows 10 20H2, az Ubuntu 20.04, PHP 7.3, MariaDB 10.4.17., Drupal 8. sz.9.13., Xdebug 3.02, Windows Terminal, VSCode with Remote - WSL és PHP Debug by Felix Becker csomagok.  WSL-t futtatok a Powershell-től a Windows Terminalon belül.

Mielőtt belekezdenénk, íme néhány javaslat, amely időt takaríthat meg Önnek.

Az apt-fast telepítése és használata az apt helyett valóban felgyorsíthatja a telepítéseket és a frissítéseket.  Ahol lakom, az internet alacsony sávszélességű és lassú, az apt-fast pedig sokkal gyorsabb, mint az apt.

A WSL Exportálás és importálás segítségével „biztonsági másolatot készíthet és visszaállíthat” a Linux terjesztésről. Mint minden rendszer esetében, tanácsos mindig aktuális biztonsági másolatot tartani.

A Mariadb Fine-t telepít, de nem lehet újraindítani vagy állapotot letölteni

A Mariadb telepítése rendben ment.  Nincsenek hibák vagy figyelmeztetések.  Amikor megpróbáltam ellenőrizni az állapotot, hibát kaptam a rendszerrel kapcsolatban.

$> systemctl status mysql
A rendszer nem lett elindítva, mivel a systemd volt az init rendszer (PID 1). Nem tud működni.

A hiba oka az, hogy a Microsoft nem támogatja a systemd-t a WSL-ben.  Szerencsére az Arkane Systems létrehozott egy system-genie csomagot a systemd engedélyezéséhez .  Javaslom, hogy alaposan olvassa el a weboldalukat, mielőtt kipróbálná a következő utasításokat, amelyek erről az oldalról származnak. Az Ubuntu-n kívüli terjesztésekhez kissé eltérő utasítások vannak.

Először telepítenie kell a .5. nettó.0 futásidő

$> sudo apt-fast frissítés
$> sudo sudo apt-fast install -y apt-transport-https
$> sudo apt-fast frissítés
$> sudo apt-fast install -y dotnet-sdk-5.0

Ezután be kell állítanunk a wsl-transdebian Repository-t

$> sudo apt-fast telepítse az apt-transport-https fájlt
$> wget -O / etc / apt / trusted.gpg.d / wsl-transzdebian.gpg https: // arkane-systems.github.io / wsl-transzdebian / apt / wsl-transzdebian.gpg
$> chmod a + r / etc / apt / trusted.gpg.d / wsl-transzdebian.gpg
$> macska << EOF > / etc / apt / sources.lista.d / wsl-transzdebian.lista
$> deb https: // arkane-systems.github.io / wsl-transzdebian / apt / bullseye main
$> deb-src https: // arkane-systems.github.io / wsl-transzdebian / apt / bullseye main
$> apt-fast frissítés

Most telepíthetjük a system-genie csomagot.

sudo apt-fast install -y systemd-genie

Lépjen ki a Linux shellből, majd állítsa le a WSL-t a Power shellről

PS C: \ Felhasználók \ Felhasználónév> wsl --leállítás

Indítsa újra a WSL-t egy dzsinnel a Powershell parancssorból.

PS C: \ Felhasználók \ Felhasználónév> wsl genie --s

Megjelenik a „Várakozás a rendszerre… .!!!!!!!!!!!!!!!”.  A teljes betöltés 180 másodpercet vesz igénybe.  Csak várja meg, amíg befejeződik.  Ha elkészült, az új shell ablaknak így kell kinéznie:

Várakozás a systemd-re .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Időtúllépés várt, amíg a systemd futó állapotba lép.
Ez jelezheti a systemd konfigurációs hibáját.
Kísérlet a folytatásra.

Ellenőrizze a genie telepítését és a systemd működését:

systemctl státusz mariadb

Meg kell kapnia a mariadb állapotkimenetét.  Vegye figyelembe, hogy a systemctl status mysql is működik.

Az Arkane Systems azt javasolja, hogy állítsa le a WSL dzsinn munkamenetét a wsl-leállítással.  Ez felszabadítja a WSL által használt összes memóriát a Windows rendszerben.

A Drupal telepít, de egyetlen CSS sem töltődik be

A Drupal 8 alap telepítésének futtatása után az oldalak nem voltak formázva.  Az oldalforrás megtekintése azt mutatta, hogy egyetlen CSS-fájl sem töltődik be. Két napig tartott, mire ezt kitaláltam, de a novella Drupal feltételezi, hogy az apache2 a / tmp könyvtárat használja, de nem.  Alapértelmezés szerint az apache2 egy privát tmp könyvtár használatára van beállítva.  Furcsa módon a sys_get_temp_dir () meghívás a php return / tmp fájlból, mégsem ezt használja az apache2.  Amikor a Drupal létrehozza optimalizált css és js fájljait, először megpróbálja beírni őket a / tmp mappába, majd áthelyezi őket a célmappába, általában sites / default / files / css és / js. De az apache2 nem használja a / tmp-t, ezért ez a folyamat kudarcot vall, és egyik css vagy js fájl sem. Az összesített CSS- és Javascript-fájlok bejelölésével ezt megkerülheti, de akkor az összes css és js fájl betöltődik, tehát ez nem megoldás.

A következő egyszerű php fájl segítségével meggyőződhet arról, hogy a tmp nem érhető el. Létrehoz egy tmpfile-t és megjeleníti a fájl nevét.  Kezdetben a fájl neve üres lesz, mert a tmpfile () hívása NULL értéket ad vissza.  A következő kódot teszteltem.php és meghívta az oldalamról, localhost / mysite / test.php

visszhang "\ n ";
visszhang "\ n ";
visszhang "A második PHP példám\ n ";
visszhang "\ n ";
visszhang "\ n ";
visszhang "

Ha megtekinti az oldal forrását, \ r \ n új sort talál ebben a karakterláncban.";
 
visszhang "

tesztelés

";
$ tmpDir = sys_get_temp_dir ();
visszhang "

TMP direcory = '$ tmpDir'

";
$ file = tmpfile ();
$ path = stream_get_meta_data ($ fájl) ['uri'];
visszhang "

A tmp fájl elérési útja = '$ elérési út'

";
 
visszhang "\ n ";
visszhang "\ n ";
?>
 
Ennek eredményeként "A tmp fájl elérési útja ="

Erre a One In a Million Apps felhasználó Stackoverflow kérdésének megjegyzésében találtam megoldást.  Ez a megoldás megváltoztatja az apache2 konfigurációt PrivateTmp = true értékről PrivateTmp = false értékre. Ne feledje, hogy az apache2 megváltoztatása privát tmp könyvtár használatára biztonsági okokból történt, és a legtöbb alkalmazás konfigurálható egy másik tmp mappa használatára.  Ezt kipróbáltam a Drupal-szal, de nem tudtam működni. Ez az első próbálkozásom a Drupal futtatására Linuxon, és azt akartam, hogy a dolgok "csak működjenek" a laptopomon, a biztonság iránti kevés gond mellett.

Először a / lib könyvtárból keresse meg a PrivateTmp fájlt, amely ezt használja:

%> sudo find / -mount -type f -exec grep -e "PrivateTmp" '' ';' -nyomtatás

Ez hosszú listát adott nekem a mérkőzésekről.  Keresse meg az apache2 fájlt tartalmazó fájlt.szolgáltatás.  Az én esetemben a / usr / lib / systemd / system / apache2 címen található.szolgáltatás.  másolja ezt a fájlt az / etc könyvtárba. Könyvtár. Az / etc / apache2 szerkesztése.szolgáltatásokat, és módosítsa a PrivateTmp = true értéket PrivateTmp = hamis értékre, mentse el és indítsa újra az apache2 szolgáltatást.

systemctl indítsa újra az apache2-t

Futtassa újra a tesztet.Ismételten meg kell jelenítenie a php oldalt, és meg kell jelenítenie a nevű tmp fájlt, megerősítve a / tmp mappához való hozzáférést.

Törölje az összes Drupal gyorsítótárat, és töltse be újra az oldalakat.  Most már helyesen kell megjeleníteniük. Nem tudom, miért, de a Drupal Cache Clear funkció nem mindig működik nálam.  Az összes fájl manuális törlése a sites / default / files / css js fájlból, majd a gyorsítótáblák kiürítésére a PhpMyAdmin használatával mindig működik.

A VSCode hibakeresés beállítása

Az Xdebug konfigurálása

Először telepítse a Remote - WSL és a PHP Debug by Felix Becker csomagokat a VSCode-ba.

Ezután telepítettem az Xdebug-ot

sudo apt-fast php7.3-xdebug

Ez a telepített 3. verzió.02 of Xdebug.

Megpróbáltam konfigurálni az interneten található sok példa követésével.  Semmi sem működött.  Kiderült, hogy a legtöbb példa az Xdebug 2-re vonatkozik.x, és ezek a konfigurációs beállítások már nem működnek a 3-mal.x

Végül a következő php-vel dolgoztam.ini beállítások.

A következőket kellett hozzáadnom az / etc / php / 7 fájlhoz.3 / apache2 / php.ini és / etc / php / 7.3 / cli / php.ini a rendszeremen.

Megtalálja az xdebug helyét.tehát az / lib könyvtárfájlra lépésével azután fusson

find -name xdebug.tehát [xdebug]
zend_extension = ./ lib / php / 20180731 / xdebug.így
xdebug.start_with_request = trigger
xdebug.mód = hibakeresés
xdebug.Discover_client_host = 1
xdebug.log = / tmp / xdebug_remote.napló
xdebug.ügyfél_port = 9003

Konfigurálja a VSCode-ot

A VSCode távoli hibakeresése indítást használ.json fájl a projekt könyvtár gyökérkönyvtárában tárolva .vscode / launch.json.

Létrehozhatja az indítást.json fájlt a VSCode felhasználói felületén keresztül, de könnyebben tudom manuálisan létrehozni.  Lépjen a webhely gyökérzetére, és hozzon létre a .vscode könyvtár. Hozzon létre egy indítást.json fájlt, és töltse be a VSCode-ba.

$> mkdir .vscode
$> cd .vscode
$> érintéses indítás.json
$> kód indítása.json

Helyezze a következő json-t a fájlba, és mentse el.


// Az IntelliSense segítségével megismerheti a lehetséges attribútumokat.
// Vigye az egérmutatót a meglévő attribútumok leírásainak megtekintéséhez.
// További információ: https: // go.microsoft.com / fwlink /?linkid = 830387
"verzió": "0.2.0 ",
"konfigurációk": [

"name": "Figyelj az XDebugra",
"type": "php",
"kérés": "indítás",
"port": 9003,
"stopOnEntry": igaz,
"log": igaz,
"pathMappings":

"/ var / www / html": "$ workspaceRoot"

,

"name": "Indítsa el a jelenleg nyitott parancsfájlt",
"type": "php",
"kérés": "indítás",
"program": "$ file",
"cwd": "$ fileDirname",
"port": 9003

]

Megjegyzés: a pathMappings alatt, ahol a „/ var / www / html” van, meg kell adnia a teljes elérési utat a webhely gyökeréhez.

Zárja be a VSCode-ot. A WSL Linux parancssorában lépjen vissza a webhely gyökérkönyvtárába, és töltse be a projektet VSCode-ba.  Feltéve, hogy még mindig a .vscode könyvtár,

$> cd…
$> kód .

Ennek be kell töltenie a projektet a VSCode-ba, és balra látnia kell a projekt teljes könyvtárfáját.  Nyissa meg a kezdőlapot, például az indexet.php, és adjon hozzá egy töréspontot.  A hibakeresés megkezdéséhez nyomja meg az F5 billentyűt.  Nyissa meg a webböngészőt, és töltse be a webhelyet. Váltson vissza VSCode-ra, és látnia kell, hogy a töréspontjánál leállt.

A kód nem fut a zsh Shell használatával

Alapértelmezés szerint a WSL be van állítva a Bash héjjal való együttműködésre, és a PATH-ban látja a futtatható VSCode elérési útját.  Zsh-re váltottam, és a VSCode már nem fog futni.  A javítás az volt, hogy álnevet helyeztek el .zshrc

$> cd ~
$> kód .zshrc

Adja hozzá a következő álnevet, amely a kódfuttatható mappa teljes elérési útjára mutat, amint azt az Ubuntu a WSL-ben látta.  Cserélje ki a YourUserName nevet a tényleges Windows felhasználói névre.

alias code = "/ mnt / c / Users / YourUserName / AppData / Local / Programs / Microsoft \ VS Code / bin / code"

Most újra be kell töltenie a zsh konfigurációt

$> forrás .zshrc

A kódnak most a zsh shellből kell betöltődnie.

Ez az!!  Ezek a lépések végül a Drupal és a VSCode hibakeresést helyesen működtették számomra.  Két napig tartott, mire rájöttem az egészre. Noob vagyok! Remélhetőleg ez az Ön számára működik és időt takarít meg.

Csak emlékeztető a környezetemre.  Windows 10 20H2, Ubuntu 20.04, PHP 7.3, MariaDB 10.4.17., Drupal 8. sz.9.13., Xdebug 3.02, Windows Terminal, VSCode with Remote - WSL és PHP Debug by Felix Becker csomagok.

Boldog kódolás!

Hogyan lehet megváltoztatni a bal és jobb egérgombokat a Windows 10 PC-n
Elég általános, hogy az összes számítógépes egéreszközt ergonómikusan a jobbkezes felhasználók számára tervezték. De vannak olyan egéreszközök, amelye...
Az egérkattintások emulálása az egérrel a Clickless Mouse használatával a Windows 10 rendszerben
Ha az egeret vagy a billentyűzetet nem megfelelő testtartásban, túlzott használat mellett használhatja, számos egészségügyi problémát okozhat, beleért...
Ezekkel az ingyenes eszközökkel adja hozzá az egérmozdulatokat a Windows 10 rendszerhez
Az elmúlt években a számítógépek és az operációs rendszerek nagymértékben fejlődtek. Volt idő, amikor a felhasználóknak parancsokkal kellett navigálni...