Ubuntu

Ubuntu 20.04, WSL2, VSCode a Drupal 8 - Oprava „Gotchas“

Ubuntu 20.04, WSL2, VSCode a Drupal 8 - Oprava „Gotchas“

Spoločnosť Microsoft konečne priniesla fantastické riešenie pre vývoj aplikácií pre Linux v systéme Windows.  Subsystém Windows pre Linux, WSL2, sa inštaluje a rozbieha pomerne ľahko, najmä ak už Linux poznáte.  Aj keď nie ste, existuje veľa veľmi dobrých článkov o tom, ako spustiť základnú inštaláciu.

Vývoj aplikácií Linux Linux pomocou VSCode v systéme Windows 10 je zhruba taký stabilný a bezproblémový, aký je len možné získať. Napriek tomu niekoľko „chichotov“, s ktorými som sa stretol, nebolo popísaných v žiadnom z článkov, ktoré som našiel o nastavení LAMP na Ubuntu a WSL2.

Mal som obmedzené skúsenosti s Linuxom a závisel som hlavne na článkoch napísaných tými, ktorí prišli predo mnou.  Aj keď ma dostali väčšinu času tam, narazil som na niekoľko problémov pri spustení Drupalu 8 bez chýb a ladení pri práci vo VSCode.  Riešenia sa našli v sekciách komentárov k otázkam zverejneným na internete. Hľadanie trvalo veľa hodín a dúfam, že ľuďom, ktorí predstavia riešenia, ktoré som našiel v tomto jednom článku, zachránim ľudí.

Moje prostredie je Windows 10 20H2, Ubuntu 20.04, 7 PHP.3, MariaDB 10.4.17, Drupal 8.9.13, Xdebug 3.02, Windows Terminal, VSCode with Remote - WSL and PHP Debug by Felix Becker packages.  Používam WSL z Powershellu v rámci Windows Terminal.

Než začneme, tu je niekoľko odporúčaní, ktoré vám môžu ušetriť čas.

Inštalácia a použitie apt-fast namiesto apt môže skutočne urýchliť inštalácie a aktualizácie.  V súčasnosti žijem na internete a má malú šírku pásma a je pomalý a apt-fast je oveľa rýchlejší ako apt.

Svoju distribúciu v systéme Linux môžete „zálohovať a obnovovať“ pomocou exportu a importu WSL. Ako v každom systéme, aj v tomto prípade je vhodné vždy udržiavať aktuálnu zálohu.

Mariadb sa inštaluje v poriadku, ale nedá sa reštartovať alebo získať stav

Inštalácia Mariadb prebehla v poriadku.  Žiadne chyby ani varovania.  Keď som sa pokúsil skontrolovať stav, zobrazila sa chyba ohľadne systému.

$> systemctl status mysql
Systém nebol zavedený so systémom systemd ako init (PID 1). Nemôžem pracovať.

Dôvod tejto chyby je, že spoločnosť Microsoft nepodporuje systemd vo WSL.  Našťastie spoločnosť Arkane Systems vytvorila balík system-genie, ktorý umožnil systemd .  Navrhujem prečítať si dôkladne ich webovú stránku skôr, ako vyskúšate nasledujúce pokyny, ktoré boli prevzaté z tejto stránky. Pre distribúcie iné ako Ubuntu existujú mierne odlišné pokyny.

Najprv musíte nainštalovať .Čistá 5.0 runtime

$> sudo apt-fast update
$> sudo sudo apt-fast install -y apt-transport-https
$> sudo apt-fast update
$> sudo apt-fast install -y dotnet-sdk-5.0

Ďalej musíme nakonfigurovať úložisko wsl-transdebian

$> sudo apt-fast install apt-transport-https
$> wget -O / etc / apt / dôveryhodné.gpg.d / wsl-transdebian.gpg https: // arkane-systems.github.io / wsl-transdebian / apt / wsl-transdebian.gpg
$> chmod a + r / etc / apt / dôveryhodné.gpg.d / wsl-transdebian.gpg
$> kat << EOF > / etc / apt / sources.zoznam.d / wsl-transdebian.zoznam
$> deb https: // arkane-systems.github.io / wsl-transdebian / apt / bullseye main
$> deb-src https: // arkane-systems.github.io / wsl-transdebian / apt / bullseye main
$> rýchla aktualizácia

Teraz môžeme nainštalovať balík system-genie.

sudo apt-fast install -y systemd-genie

Ukončite prostredie Linux a potom vypnite WSL z prostredia Power Shell

PS C: \ Users \ UsrName> wsl --shutdown

Reštartujte WSL pomocou džina z príkazového riadku Powershell.

PS C: \ Users \ UsrName> wsl genie --s

Uvidíte „Čaká sa na systém… .!!!!!!!!!!!!!!!“.  Úplné načítanie trvá 180 sekúnd.  Len počkajte, kým to skončí.  Po dokončení by vaše nové okno shellu malo vyzerať takto:

Čaká sa na systém .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Vypršal časový limit čakania na prechod systému do prevádzkového stavu.
Môže to znamenať chybu konfigurácie systému.
Pokus o pokračovanie.

Potvrďte, že je džin nainštalovaný a že systemd funguje:

systemctl status mariadb

Mali by ste dostať výstup stavu pre mariadb.  Upozorňujeme, že funguje aj systémový stav mysql.

Spoločnosť Arkane Systems odporúča ukončiť reláciu WSL genie pomocou príkazu wsl -shutdown.  Takto sa uvoľní všetka pamäť používaná WSL vo Windows.

Drupal sa inštaluje, ale nenačítajú sa žiadne CSS

Po spustení základnej inštalácie systému Drupal 8 stránky nemali žiadne formátovanie.  Prezeranie zdroja stránky ukázalo, že sa nenačítavali žiadne súbory CSS. Trvalo mi dva dni, kým som na to prišiel, ale poviedka je, že Drupal predpokladá, že apache2 používa adresár / tmp, ale nie je.  V predvolenom nastavení je apache2 nakonfigurovaný na používanie súkromného adresára tmp.  Kupodivu, volanie, sys_get_temp_dir () z php return / tmp, ale to nie je to, čo apache2 používa.  Keď Drupal vytvorí svoje optimalizované súbory css a js, najskôr sa ich pokúsi zapísať do priečinka / tmp, potom ich presunie do cieľového priečinka, zvyčajne sites / default / files / css a / js. Ale apache2 nepoužíva / tmp, takže tento proces zlyhá a žiadny zo súborov css alebo js. Zrušením začiarknutia možnosti Súhrnné súbory CSS a Javascript to obídete, potom sa však načítajú všetky jednotlivé súbory CSS a JS, takže to nie je riešenie.

Tento problém / tmp nie je prístupný môžete potvrdiť pomocou nasledujúceho jednoduchého php súboru. Vytvorí súbor tmpf a zobrazí názov súboru.  Spočiatku bude názov súboru prázdny, pretože volanie funkcie tmpfile () vráti hodnotu NULL.  Nasledujúci kód som dal otestovať.php a zavolal som to z mojej stránky, localhost / mysite / test.php

ozvena “\ n ";
ozvena “\ n ";
ozvena “Môj druhý príklad PHP\ n ";
ozvena “\ n ";
ozvena “\ n ";
ozvena “

Ak zobrazíte zdroj stránky \ r \ n, v tomto reťazci nájdete nový riadok.";
 
ozvena “

testovanie

";
$ tmpDir = sys_get_temp_dir ();
ozvena “

Adresár TMP = '$ tmpDir'

";
$ súbor = tmpfile ();
$ path = stream_get_meta_data ($ súbor) ['uri'];
ozvena “

Cesta k súboru tmp = '$ cesta'

";
 
ozvena “\ n ";
ozvena “\ n ";
?>
 
Výsledkom bola „Cesta k súboru tmp =“

Riešenie som našiel v komentároch k otázke Stackoverflow od používateľa One In a Million Apps.  Toto riešenie zmení konfiguráciu apache2 z PrivateTmp = true na PrivateTmp = false. Pamätajte, že zmena apache2 na použitie súkromného adresára tmp bola vykonaná z bezpečnostných dôvodov a väčšinu aplikácií je možné nakonfigurovať na použitie iného priečinka tmp.  Skúšal som to s Drupalom, ale nemohol som to nechať fungovať. Toto je môj prvý pokus o spustenie Drupalu v systéme Linux a chcel som, aby veci na mojom notebooku „len fungovali“ bez toho, aby som sa obával o bezpečnosť.

Najprv vyhľadajte súbor obsahujúci PrivateTmp pomocou tohto súboru v adresári / lib:

%> sudo find / -mount -type f -exec grep -e "PrivateTmp" '' ';' -tlač

Toto mi dalo dlhý zoznam zápasov.  Vyhľadajte ten, ktorý obsahuje súbor apache2.služby.  V mojom prípade sa našiel na / usr / lib / systemd / system / apache2.služby.  skopírujte tento súbor na / etc. adresár. Upravte súbor / etc / apache2.služby a zmeňte PrivateTmp = true na PrivateTmp = false, uložte a reštartujte službu apache2.

systemctl restart apache2

Znova spustite test.znova stránku php a mali by ste zobraziť zobrazený súbor tmp s potvrdením prístupu do priečinka / tmp.

Vymažte všetky pamäte Drupalu a znovu načítajte stránky.  Teraz by sa mali zobrazovať správne. Neviem prečo, ale funkcia Drupal Clear Cache nie vždy funguje pre mňa.  Ručné odstránenie všetkých súborov na stránkach / default / files / css js a následné použitie programu PhpMyAdmin na vyprázdnenie tabuliek medzipamäte vždy funguje.

Nastavenie ladenia VSCode

Nakonfigurujte Xdebug

Najskôr si na VSCode nainštalujte balíčky Remote - WSL a PHP Debug od Felixa Beckera.

Potom som nainštaloval Xdebug

sudo apt-fast php7.3-ladenie

Táto nainštalovaná verzia 3.02 z Xdebug.

Pokúsil som sa to nakonfigurovať podľa mnohých príkladov na internete.  Nič nezaberalo.  Ukázalo sa, že väčšina príkladov je určená pre Xdebug 2.xa tieto konfiguračné nastavenia už nebudú fungovať s 3.X

Nakoniec som to začal pracovať s nasledujúcim php.ini nastavenia.

Musel som pridať nasledujúce do oboch / etc / php / 7.3 / apache2 / php.ini a / etc / php / 7.3 / cli / php.ini na mojom systéme.

Môžete nájsť umiestnenie vášho xdebug.presunutím do súboru adresára / lib a následným spustením

find -name xdebug.takže [xdebug]
zend_extension = ./ lib / php / 20180731 / xdebug.tak
xdebug.start_with_request = spúšťač
xdebug.mode = debug
xdebug.discover_client_host = 1
xdebug.log = / tmp / xdebug_remote.log
xdebug.client_port = 9003

Nakonfigurujte VSCode

Vzdialené ladenie vo VSCode používa spustenie.súbor JSON uložený v koreňovom adresári vášho projektu v priečinku .vscode / spustenie.json.

Môžete vytvoriť spustenie.súbor JSON cez používateľské rozhranie VSCode, ale zdá sa mi jednoduchšie vytvoriť ho ručne.  Presuňte sa na koreň svojej webovej stránky a vytvorte .adresár vscode. Vytvorte spustenie.súbor JSON a načítať ho do VSCode.

$> mkdir .vscode
$> cd .vscode
$> dotykové spustenie.json
$> spustenie kódu.json

Vložte nasledujúci súbor JSON do súboru a uložte ho.


// Pomocou technológie IntelliSense sa dozviete o možných atribútoch.
// Umiestnením kurzora myši zobrazíte popisy existujúcich atribútov.
// Viac informácií nájdete na: https: // go.Microsoft.com / fwlink /?linkid = 830387
"verzia": "0.2.0 ",
"konfigurácie": [

"name": "Počúvajte XDebug",
"type": "php",
"request": "launch",
„port“: 9003,
"stopOnEntry": pravda,
"log": pravda,
"pathMappings":

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

,

"name": "Spustiť aktuálne otvorený skript",
"type": "php",
"request": "launch",
"program": "$ file",
"cwd": "$ fileDirname",
„port“: 9003

]

Všimnite si, že pod pathMappings, kde mám „/ var / www / html“, by ste mali dať úplnú cestu ku koreňu vášho webu.

Zatvorte VSCode. Vo výzve WSL Linux sa vráťte späť na koreň svojej webovej stránky a načítajte projekt do VSCode.  Za predpokladu, že ste stále v .adresár vscode,

$> cd…
$> kód .

Toto by malo načítať projekt vo VSCode a vľavo by ste mali vidieť celý adresárový strom vášho projektu.  Otvorte úvodnú stránku, napríklad index.php a pridajte bod prerušenia.  Stlačením klávesu F5 spustíte ladenie.  Prejdite do webového prehľadávača a načítajte web. Prepnite späť na VSCode a mali by ste vidieť, že sa zastaví na vašom bode prerušenia.

Kód nefunguje so zsh Shell

V predvolenom nastavení je WSL nastavený na prácu s shellom Bash a vidí cestu k spustiteľnému súboru VSCode v PATH.  Prešiel som na zsh a VSCode by už nešiel.  Oprava spočívala v vložení aliasu .zshrc

$> cd ~
$> kód .zshrc

Pridajte nasledujúci alias, ktorý ukazuje na úplnú cestu k spustiteľnému priečinku kódu, ako to vidí Ubuntu vo WSL.  Nahraďte YourUserName svojím skutočným užívateľským menom Windows.

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

Teraz musíte znova načítať konfiguráciu zsh pomocou

$> zdroj .zshrc

Kód by sa teraz mal načítať z shellu zsh.

To je všetko!!  Tieto kroky nakoniec umožnili, aby ladenie Drupalu a VSCode fungovalo správne.  Trvalo mi dva dni, kým som na toto všetko prišiel. Som noob! Dúfajme, že to bude fungovať pre vás a ušetrí vám to čas.

Len pripomenutie môjho prostredia.  Windows 10 20H2, Ubuntu 20.04, 7 PHP.3, MariaDB 10.4.17, Drupal 8.9.13, Xdebug 3.02, Windows Terminal, VSCode with Remote - WSL and PHP Debug by Felix Becker packages.

Šťastné kódovanie!

Ako zmeniť nastavenie myši a touchpadu pomocou systému Xinput v systéme Linux
Väčšina distribúcií systému Linux sa štandardne dodáva s knižnicou „libinput“ na spracovanie vstupných udalostí v systéme. Dokáže spracovať vstupné ud...
S ovládaním pomocou myši X-Mouse môžete tlačidlá myši premapovať odlišne pre iný softvér
Možno budete potrebovať nástroj, ktorý by mohol zmeniť ovládanie myši pri každej aplikácii, ktorú používate. Ak je to váš prípad, môžete vyskúšať apli...
Recenzia bezdrôtovej myši Microsoft Sculpt Touch
Nedávno som čítal o Microsoft Sculpt Touch bezdrôtová myš a rozhodol sa ju kúpiť. Po chvíli používania som sa rozhodol s ním podeliť o svoje skúsenost...