Ubuntu

Ubuntu 20.04, WSL2, VSCode ja Drupal 8 - “Gotchade” parandamine

Ubuntu 20.04, WSL2, VSCode ja Drupal 8 - “Gotchade” parandamine

Microsoft on lõpuks andnud suurepärase lahenduse Linuxi rakenduste arendamiseks Windowsis.  Windowsi Linuxi alamsüsteemi WSL2 on üsna lihtne installida ja tööle panna, eriti kui olete Linuxiga juba tuttav.  Isegi kui te pole seda, on põhiinstallatsiooni käivitamise kohta palju väga häid artikleid.

Linuxi PHP-rakenduste arendamine VSCode abil Windows 10-s on umbes sama stabiilne ja sujuv kogemus, mida võib saada. Sellegipoolest ei olnud ühtegi artiklit, mida leidsin LAMP-i seadistamise kohta Ubuntu ja WSL2-s.

Mul oli Linuxiga piiratud kogemus ja sõltusin suuresti artiklitest, mille kirjutasid minu ette tulijad.  Kuigi nad viisid mind suurema osa teest sinna, tekkis mul mitu probleemi, kuidas Drupal 8 ilma vigadeta töötada ja VSCode'is töötamine siluda.  Lahendused leiti Internetis postitatud küsimuste kommentaaride jaotistest. See võttis mitu tundi otsimist ja ma loodan inimesi päästa, esitades selles artiklis leitud lahendused.

Minu keskkond on Windows 10 20H2, Ubuntu 20.04, PHP 7.3, MariaDB 10.4.17, Drupal 8.9.13, Xdebug 3.02, Windowsi terminal, kaugjuhtimisega VSCode - WSL ja PHP silumine Felix Beckeri pakettidega.  Käitan Windows Terminalis WSL-i Powershellilt.

Enne alustamist on siin mõned soovitused, mis võivad teie aega kokku hoida.

Apt-fast'i installimine ja kasutamine apt asemel võib tõepoolest installimise ja värskendamise kiirendada.  Seal, kus elan, on Internet väikese ribalaiusega ja aeglane ning apt-fast on palju kiirem kui apt.

WSL-i ekspordi ja impordi abil saate oma Linuxi jaotuse varundada ja taastada. Nagu iga süsteemi puhul, on soovitatav alati säilitada praegune varukoopia.

Mariadb installib trahvi, kuid ei saa taaskäivitada ega olekut saada

Mariadbi installimine läks hästi.  Ei vigu ega hoiatusi.  Kui proovisin olekut kontrollida, sain süsteemi osas vea.

$> systemctl olek mysql
Süsteemi pole käivitatud, kui systemd on init süsteem (PID 1). Ei saa opereerida.

Selle tõrke põhjuseks on see, et Microsoft ei toeta WSL-is systemd.  Õnneks lõi Arkane Systems systemd lubamiseks pakett-system-genie .  Soovitan enne nende lehtelt võetud järgmiste juhiste proovimist nende veebileht põhjalikult läbi lugeda. Muude jaotuste peale Ubuntu kohta on veidi erinevad juhised.

Esiteks peate installima .Net 5.0 tööaega

$> sudo apt-fast värskendus
$> sudo sudo apt-fast install -y apt-transport-https
$> sudo apt-fast värskendus
$> sudo apt-fast install -y dotnet-sdk-5.0

Järgmisena peame konfigureerima wsl-transdebiani hoidla

$> sudo apt-fast install apt-transport-https
$> wget -O / etc / apt / usaldusväärne.gpg.d / wsl-transdebian.gpg https: // arkane-systems.github.io / wsl-transdebian / apt / wsl-transdebian.gpg
$> chmod a + r / etc / apt / usaldusväärne.gpg.d / wsl-transdebian.gpg
$> kass << EOF > / etc / apt / sources.nimekirja.d / wsl-transdebian.nimekirja
$> deb https: // arkane-systems.github.io / wsl-transdebian / apt / bullseye main
$> deb-src https: // arkane-systems.github.io / wsl-transdebian / apt / bullseye main
$> apt-fast värskendus

Nüüd saame süsteemi-genie paketi installida.

sudo apt-fast install -y systemd-genie

Sulgege oma Linuxi kest ja sulgege WSL Power Shellist

PS C: \ Users \ UsrName> wsl - väljalülitamine

Taaskäivitage WSL koos džinniga Powershelli viipilt.

PS C: \ Kasutajad \ Kasutajanimi> wsl džinn - s

Näete teadet „Ootan süsteemi .!!!!!!!!!!!!!!!”.  Täielikuks laadimiseks kulub 180 sekundit.  Lihtsalt oodake, kuni see lõpeb.  Kui see on valmis, peaks teie uus kestaken välja nägema järgmine:

Systemd ootel .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Aegus, kui oodati, kui systemd siseneb jooksvasse olekusse.
See võib viidata systemd konfiguratsiooniveale.
Katse jätkata.

Veenduge, et džinn on installitud ja süsteemd töötab:

systemctl staatus mariadb

Peaksite saama mariadbi olekuväljundi.  Pange tähele, et ka systemctl status mysql töötab.

Arkane Systems soovitab oma WSL-i džinniseansi sulgeda wsl-shutdowniga.  See vabastab kogu Windowsi WSL-i poolt kasutatava mälu.

Drupal installib, kuid ühtegi CSS-i ei laadita

Pärast Drupal 8 põhiinstallimise käivitamist ei olnud lehtedel vormindust.  Lehe allika vaatamine näitas, et ühtegi CSS-faili ei laadita. Selle välja selgitamine võttis mul kaks päeva, kuid novell on see, et Drupal eeldab, et apache2 kasutab kataloogi / tmp, kuid see pole.  Vaikimisi on apache2 konfigureeritud kasutama privaatset tmp-kataloogi.  Kummalisel kombel helistab sys_get_temp_dir () php return / tmp-st, kuid see pole see, mida apache2 kasutab.  Kui Drupal loob oma optimeeritud css- ja js-failid, proovib ta need kõigepealt kirjutada kausta / tmp, seejärel teisaldab need sihtkausta, tavaliselt sites / default / files / css ja / js. Kuid apache2 ei kasuta / tmp, nii et see protsess ebaõnnestub ja ükski CSS- ega JS-failidest. Kombineeritud CSS- ja Javascripti failide märkeruudu märkimine möödub sellest, kuid seejärel laaditakse kõik üksikud css- ja js-failid, nii et see pole lahendus.

Järgmise lihtsa php-failiga saate kinnitada, et sellele probleemile / tmp pole juurdepääsetav. See loob tmp-faili ja kuvab faili nime.  Esialgu on faili nimi tühi, kuna kutse tmpfile () tagastab NULL.  Panin testile järgmise koodi.php ja kutsus selle minu saidilt localhost / mysite / test.php

kaja "\ n ";
kaja "\ n ";
kaja "Minu teine ​​PHP näide\ n ";
kaja "\ n ";
kaja "\ n ";
kaja "

Kui vaatate lehe allikat \ r \ n, leiate sellest stringist uue rea.";
 
kaja "

testimine

";
$ tmpDir = sys_get_temp_dir ();
kaja "

TMP-kataloog = '$ tmpDir'

";
$ file = tmpfile ();
$ path = stream_get_meta_data ($ fail) ['uri'];
kaja "

Tmp-faili tee = '$ path'

";
 
kaja "\ n ";
kaja "\ n ";
?>
 
Selle tulemuseks oli "tmp-faili tee ="

Leidsin sellele lahenduse kasutaja One In the Million Apps'i Stackoverflow küsimuse kommentaaridest.  See lahendus muudab apache2 konfiguratsiooni väärtusest PrivateTmp = true väärtuseks PrivateTmp = false. Pange tähele, et apache2 muutmine privaatse tmp-kataloogi kasutamiseks toimus turvalisuse huvides ja enamikku rakendusi saab konfigureerida kasutama teist tmp-kausta.  Proovisin seda Drupaliga, kuid ei suutnud seda tööle panna. See on minu esimene katse Drupali Linuxis käitada ja ma tahtsin, et minu sülearvutis asjad lihtsalt töötaksid, hoolimata turvalisusest.

Kõigepealt otsige faili, mis sisaldab PrivateTmp, kasutades seda kataloogist / lib:

%> sudo find / -mount -type f -exec grep -e "PrivateTmp" '' ';' -trükk

See andis mulle pika nimekirja vasteid.  Otsige faili apache2 sisaldavat.teenus.  Minu puhul leiti see aadressilt / usr / lib / systemd / system / apache2.teenus.  kopeerige see fail kataloogi / etc. kataloogi. Redigeeri / etc / apache2.teenused ja muutke PrivateTmp = true väärtuseks PrivateTmp = false, salvestage ja taaskäivitage apache2 teenus.

systemctl taaskäivitage apache2

Käivitage test uuesti.php leht uuesti ja peaksite saama kuvatud tmp-faili, mis kinnitab juurdepääsu kaustale / tmp.

Tühjendage kõik Drupali vahemälud ja laadige lehed uuesti.  Need peaksid nüüd õigesti kuvatama. Ma ei tea miks, kuid Drupali vahemälu tühjendamise funktsioon ei tööta minu jaoks alati.  Kõigi saitide / default / files / css js failide käsitsi kustutamine, siis vahemälu tabelite tühjendamiseks PhpMyAdmini kasutamine töötab alati.

VSCode silumise seadistamine

Xdebugi seadistamine

Kõigepealt installige VSCode-i Felix Beckeri paketid Remote - WSL ja PHP Debug.

Seejärel installisin Xdebugi

sudo apt-fast php7.3-xdebug

See installitud versioon 3.02 Xdebugist.

Proovisin seda konfigureerida, järgides paljusid näiteid Internetis.  Miski ei töötanud.  Selgus, et enamik näiteid on mõeldud Xdebug 2 jaoks.x ja need konfiguratsiooniseaded ei tööta enam seadmega 3.x

Lõpuks sain selle tööle järgmise php-ga.ini seaded.

Pidin mõlemale / etc / php / 7 lisama järgmise.3 / apache2 / php.ini ja / etc / php / 7.3 / cli / php.ini minu süsteemis.

Leiate oma xdebugi asukoha.nii et liikudes kataloogi faili / lib, seejärel töötades

otsi -name xdebug.nii [xdebug]
zend_extension = ./ lib / php / 20180731 / xdebug.nii
xdebug.start_with_request = päästik
xdebug.mode = silumine
xdebug.avastama_kliendi_host = 1
xdebug.log = / tmp / xdebug_remote.logi
xdebug.klient_port = 9003

Konfigureerige VSCode

VSCode'i kaugsilumine kasutab käivitamist.json-fail, mis on salvestatud teie projekti kataloogi juurkataloogi .vscode / käivitamine.json.

Saate luua käivitusprogrammi.json-fail VSCode'i kasutajaliidese kaudu, kuid mul on selle käsitsi loomine lihtsam.  Liikuge oma veebisaidi juure ja looge a .vscode kataloog. Looge käivitus.jsoni fail ja laadige see VSCode'i.

$> mkdir .vscode
$> cd .vscode
$> puutetundlik käivitamine.json
$> koodi käivitamine.json

Pange järgmine json faili ja salvestage see.


// Kasutage IntelliSense'i võimalike atribuutide tundmaõppimiseks.
// Olemasolevate atribuutide kirjelduste kuvamiseks hõljutage kursorit.
// Lisateabe saamiseks külastage aadressi: https: // go.microsoft.com / fwlink /?linkid = 830387
"versioon": "0.2.0 ",
"konfiguratsioonid": [

"name": "Kuula XDebugit",
"tüüp": "php",
"request": "launch",
"sadam": 9003,
"stopOnEntry": tõene,
"log": tõene,
"pathMappings":

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

,

"name": "Käivitage praegu avatud skript",
"tüüp": "php",
"request": "launch",
"programm": "$ file",
"cwd": "$ fileDirname",
"sadam": 9003

]

Märkus pathMappings all, kus mul on “/ var / www / html”, peaksite sisestama täieliku tee oma veebisaidi juure.

Sulgege VSCode. Liikuge oma WSL Linuxi viipas tagasi oma veebisaidi juurte juurde ja laadige projekt VSCode'i.  Eeldades, et olete endiselt .vscode kataloog,

$> cd…
$> kood .

See peaks projekti laadima VSCode'i ja vasakul peaksite nägema oma projekti täielikku kataloogipuud.  Avage oma avaleht, näiteks register.php ja lisage murdepunkt.  Silumise alustamiseks vajutage klahvi F5.  Minge veebibrauserisse ja laadige sait. Lülitage tagasi VSCode'i juurde ja peaksite nägema, et see on teie katkestuspunktis peatunud.

Kood ei tööta zsh Shelliga

Vaikimisi on WSL seadistatud töötama Bashi kestaga ja see näeb PATH-is käivitatava VSCode'i teed.  Vahetasin zsh-i ja VSCode ei töötanud enam.  Paranduseks pidi olema varjunime sisestamine .zshrc

$> cd ~
$> kood .zshrc

Lisage järgmine varjunimi, mis osutab koodi käivitatava kausta täielikule teele, nagu näeb Ubuntu WSL-is.  Asendage oma kasutajanimi oma tegeliku Windowsi kasutajanimega.

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

Nüüd peate zsh-i konfiguratsiooni uuesti laadima

$> allikas .zshrc

Kood peaks nüüd laadima zsh-i kestast.

See selleks!!  Need sammud said Drupali ja VSCode silumise lõpuks minu jaoks õigesti tööle.  Mul kulus kaks päeva, et sellest kõigest aru saada. Olen noob! Loodetavasti töötab see teie jaoks ja säästab teie aega.

Lihtsalt meeldetuletus minu keskkonnast.  Windows 10 20H2, Ubuntu 20.04, PHP 7.3, MariaDB 10.4.17, Drupal 8.9.13, Xdebug 3.02, Windowsi terminal, kaugjuhtimisega VSCode - WSL ja PHP silumine Felix Beckeri pakettidega.

Head kodeerimist!

Nende tasuta tööriistade abil lisage Windows 10-le hiire liigutused
Viimastel aastatel on arvutid ja operatsioonisüsteemid palju arenenud. Oli aeg, mil kasutajad pidid failihaldurites navigeerimiseks kasutama käske. Na...
Juhtige ja hallake hiire liikumist mitme kuvari vahel Windows 10-s
Dual Display Mouse Manager võimaldab teil kontrollida ja konfigureerida hiire liikumist mitme monitori vahel, aeglustades selle liikumist piiri läheda...
WinMouse võimaldab teil kohandada ja parandada hiirekursori liikumist Windowsi arvutis
Kui soovite oma hiirekursori vaikefunktsioone paremaks muuta, kasutage vabavara WinMouse. See lisab rohkem funktsioone, mis aitavad teil alandlikust h...