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 mysqlA 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-genieLé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ásIndítsa újra a WSL-t egy dzsinnel a Powershell parancssorból.
PS C: \ Felhasználók \ Felhasználónév> wsl genie --sMegjelenik 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 mariadbMeg 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 "
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ásEz 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-tFuttassa ú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-xdebugEz 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 .zshrcA 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!