Ubuntu

Ubuntu 20.04, WSL2, VSCode in Drupal 8 - Odpravljanje težav

Ubuntu 20.04, WSL2, VSCode in Drupal 8 - Odpravljanje težav

Microsoft je končno ponudil fantastično rešitev za razvoj aplikacij Linuxa v sistemu Windows.  Podsistem Windows za Linux, WSL2, je dokaj enostaven za namestitev in zagon, še posebej, če že poznate Linux.  Tudi če niste, obstaja veliko zelo dobrih člankov o tem, kako pripraviti in zagnati osnovno namestitev.

Razvoj aplikacij PHP za Linux z uporabo VSCode v sistemu Windows 10 je približno tako stabilna in brezhibna izkušnja, kot jo lahko dobimo. Kljub temu več »dobljenih«, na katere sem naletel, ni bilo opisanih v nobenem članku, ki sem ga našel o nastavitvi LAMP na Ubuntu in WSL2.

Imel sem omejene izkušnje z Linuxom in sem bil močno odvisen od člankov tistih, ki so prišli pred mano.  Medtem ko so me pripeljali večino poti tja, sem naletel na več težav pri zagonu Drupal 8 brez napak in odpravljanju napak pri delu v VSCode.  Rešitve so bile najdene v oddelkih za komentarje vprašanj, objavljenih na internetu. To je trajalo veliko ur iskanja in upam, da bom rešil ljudi s predstavitvijo rešitev, ki sem jih našel v tem enem članku.

Moje okolje je Windows 10 20H2, Ubuntu 20.04, PHP 7.3, MariaDB 10.4.17, Drupal 8.9.13, Xdebug 3.02, Windows Terminal, VSCode z daljinskim upravljalnikom - WSL in PHP Debug paketi Felix Becker.  WSL izvajam iz Powershella v terminalu Windows.

Preden začnemo, je tu nekaj priporočil, s katerimi boste morda prihranili čas.

Namestitev in uporaba apt-fast namesto apt lahko resnično pospeši namestitve in posodobitve.  Kjer živim, ima internet nizko pasovno širino in počasen, hiter in hiter pa veliko hitrejši kot apt.

Svojo distribucijo Linuxa lahko "varnostno kopirate in obnovite" s pomočjo WSL Export and Import. Kot pri vsakem sistemu je tudi tukaj priporočljivo, da vedno vzdržujete trenutno varnostno kopijo.

Mariadb se dobro namesti, vendar ga ni mogoče znova zagnati ali pridobiti stanja

Namestitev Mariadb je potekala v redu.  Brez napak ali opozoril.  Ko sem poskusil preveriti stanje, sem dobil napako v zvezi s sistemom.

$> systemctl status mysql
Sistem ni zagnan s sistemom kot začetnim sistemom (PID 1). Ne morem delovati.

Razlog za to napako je, da Microsoft ne podpira systemd v WSL.  Na srečo je Arkane Systems ustvaril paket system-genie, ki je omogočil systemd .  Predlagam, da temeljito preberete njihovo spletno stran, preden preizkusite naslednja navodila, ki so bila povzeta s te strani. Obstajajo nekoliko drugačna navodila za distribucije, ki niso Ubuntu.

Najprej morate namestiti .Neto 5.0 izvajanje

$> sudo apt-hitra posodobitev
$> sudo sudo apt-hitra namestitev -y apt-transport-https
$> sudo apt-hitra posodobitev
$> sudo apt-fast install -y dotnet-sdk-5.0

Nato moramo konfigurirati repozitorij wsl-transdebian

$> sudo apt-hitro namesti apt-transport-https
$> wget -O / etc / apt / trusted.gpg.d / wsl-transdebian.gpg https: // arkane-systems.github.io / wsl-transdebian / apt / wsl-transdebian.gpg
$> chmod a + r / etc / apt / trusted.gpg.d / wsl-transdebian.gpg
$> mačka << EOF > / etc / apt / sources.seznam.d / wsl-transdebian.seznam
$> deb https: // arkane-systems.github.io / wsl-transdebian / apt / bullseye main
$> deb-src https: // arkane-systems.github.io / wsl-transdebian / apt / bullseye main
$> apt-hitra posodobitev

Zdaj lahko namestimo paket system-genie.

sudo apt-hitra namestitev -y systemd-genie

Zaprite lupino Linuxa in nato zaustavite WSL iz lupine Power

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

Znova zaženite WSL z duhom iz poziva Powershell.

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

Videli boste »Čakanje na sistem .. .!!!!!!!!!!!!!!!".  Popolno nalaganje traja 180 sekund.  Samo počakajte, da se konča.  Ko končate, mora biti novo okno lupine videti tako:

Čakanje na sistem… !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Čas je potekel in čakal, da sistemd vstopi v stanje delovanja.
To lahko pomeni sistemsko napako v konfiguraciji.
Poskus nadaljevanja.

Preverite, ali je genie nameščen in sistem deluje:

systemctl status mariadb

Morali bi dobiti izpis stanja za mariadb.  Upoštevajte, da deluje tudi systemctl status mysql.

Arkane Systems priporoča, da zaprete sejo gena WSL z izklopom wsl.  S tem boste sprostili ves pomnilnik, ki ga WSL uporablja v sistemu Windows.

Drupal se namesti, vendar se CSS ne naloži

Po izvedbi osnovne namestitve za Drupal 8 strani niso imele oblikovanja.  Ogled izvorne strani je pokazal, da se ne nalagajo datoteke CSS. Za to sem rabil dva dni, toda kratka zgodba je, da Drupal predvideva, da apache2 uporablja imenik / tmp, vendar ni.  Privzeto je apache2 konfiguriran za uporabo zasebnega imenika tmp.  Čudno klicanje, sys_get_temp_dir () iz php return / tmp, vendar apache2 tega ne uporablja.  Ko Drupal ustvari svoje optimizirane datoteke css in js, jih najprej poskuša zapisati v mapo / tmp, nato pa jih premakne v ciljno mapo, običajno sites / default / files / css in / js. Toda apache2 ne uporablja / tmp, zato ta postopek ne uspe in nobena datoteka css ali js. Odznačitev zbirnih datotek CSS in Javascript bo to zaobšla, potem pa se nato naložijo vse posamezne datoteke css in js, zato to ni rešitev.

To težavo / tmp, da ni dostopna, lahko potrdite z naslednjo preprosto php datoteko. Ustvari datoteko tmp in prikaže ime datoteke.  Sprva bo ime datoteke prazno, ker klic tmpfile () vrne NULL.  Preizkusil sem naslednjo kodo.php in ga poklical z moje strani, localhost / mysite / test.php

odmev "\ n ";
odmev "\ n ";
odmev "Moj drugi primer PHP\ n ";
odmev "\ n ";
odmev "\ n ";
odmev "

Če si ogledate vir strani \ r \ n, boste v tem nizu našli novo vrstico.";
 
odmev "

testiranje

";
$ tmpDir = sys_get_temp_dir ();
odmev "

TMP direcory = '$ tmpDir'

";
$ datoteka = tmpfile ();
$ path = stream_get_meta_data ($ datoteka) ['uri'];
odmev "

Pot tmp datoteke = '$ pot'

";
 
odmev "\ n ";
odmev "\ n ";
?>
 
Posledica je bila "Pot tmp datoteke ="

Rešitev za to sem našel v komentarjih vprašanja Stackoverflow uporabnika One In a Million Apps.  Ta rešitev spremeni konfiguracijo apache2 iz PrivateTmp = true v PrivateTmp = false. Upoštevajte, da je bila sprememba apache2 za uporabo zasebnega imenika tmp opravljena iz varnostnih razlogov in večino aplikacij lahko konfigurirate za uporabo druge mape tmp.  To sem poskusil z Drupalom, vendar ga nisem uspel zagnati. To je moj prvi poskus zagnati Drupal v Linuxu in želel sem, da stvari na mojem prenosnem računalniku "preprosto delujejo", brez skrbi za varnost.

Najprej poiščite datoteko, ki vsebuje PrivateTmp, z uporabo te iz imenika / lib:

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

To mi je dalo dolg seznam tekem.  Poiščite tisto, ki vsebuje datoteko apache2.storitev.  V mojem primeru je bil najden na / usr / lib / systemd / system / apache2.storitev.  kopirajte to datoteko v / etc. imenik. Uredi / etc / apache2.storitve in spremenite PrivateTmp = true v PrivateTmp = false, shranite in znova zaženite storitev apache2.

systemctl znova zaženite apache2

Znova zaženite test.znova na strani php in prikazala bi se datoteka z imenom tmp, ki potrjuje dostop do mape / tmp.

Počistite vse Drupalove predpomnilnike in znova naložite strani.  Zdaj bi se morali pravilno prikazati. Ne vem, zakaj, vendar funkcija Drupal Clear Cache zame ne deluje vedno.  Ročno brisanje vseh datotek v sites / default / files / css js in nato uporaba PhpMyAdmin za praznjenje tabel predpomnilnika vedno deluje.

Nastavitev odpravljanja napak VSCode

Konfigurirajte Xdebug

Najprej namestite pakete Remote - WSL in PHP Debug by Felix Becker v VSCode.

Nato sem namestil Xdebug

sudo apt-fast php7.3-xdebug

Ta nameščena različica 3.02 iz Xdebuga.

Poskusil sem ga konfigurirati, tako da sem sledil številnim primerom v internetu.  Nič ni delovalo.  Izkazalo se je, da je večina primerov za Xdebug 2.x in te nastavitve konfiguracije ne delujejo več s 3.x

Končno sem dobil delo z naslednjim php-jem.nastavitve ini.

V oba / etc / php / 7 sem moral dodati naslednje.3 / apache2 / php.ini in / etc / php / 7.3 / cli / php.ini v mojem sistemu.

Lokacijo vašega xdebuga lahko najdete.tako da se premaknete v datoteko imenika / lib in nato zaženete

najdi -ime xdebug.torej [xdebug]
zend_extension = ./ lib / php / 20180731 / xdebug.torej
xdebug.start_with_request = sprožilec
xdebug.način = odpravljanje napak
xdebug.Discover_client_host = 1
xdebug.log = / tmp / xdebug_remote.log
xdebug.client_port = 9003

Konfigurirajte VSCode

Oddaljeno odpravljanje napak v VSCode uporablja zagon.json, shranjena v korenu imenika vašega projekta v .vscode / zagon.json.

Zagon lahko ustvarite.json prek uporabniškega vmesnika VSCode, vendar ga lažje ustvarim ročno.  Premaknite se na koren vašega spletnega mesta in ustvarite .vscode imenik. Ustvari zagon.json in jo naložite v VSCode.

$> mkdir .vscode
$> cd .vscode
$> lansiranje na dotik.json
$> zagon kode.json

V datoteko vstavite naslednji json in ga shranite.


// Uporabite IntelliSense za spoznavanje možnih lastnosti.
// Premaknite miškin kazalec za ogled opisov obstoječih atributov.
// Za več informacij obiščite: https: // go.Microsoft.com / fwlink /?povezava = 830387
"version": "0.2.0 ",
"konfiguracije": [

"name": "Poslušaj XDebug",
"type": "php",
"request": "zagon",
"pristanišče": 9003,
"stopOnEntry": true,
"log": true,
"preslikave poti":

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

,

"name": "Zaženi trenutno odprt skript",
"type": "php",
"request": "zagon",
"program": "$ datoteka",
"cwd": "$ fileDirname",
"pristanišče": 9003

]

Opomba v razdelku pathMappings, kjer imam “/ var / www / html”, vstavite celotno pot do korena vašega spletnega mesta.

Zaprite VSCode. V pozivu za WSL Linux se vrnite na koren spletnega mesta in naložite projekt v VSCode.  Ob predpostavki, da ste še vedno v .vscode imenik,

$> cd…
$> koda .

To bi moralo naložiti projekt v VSCode, na levi strani pa bi morali videti celotno drevo imenikov vašega projekta.  Odprite začetno stran, na primer kazalo.php in dodajte mejno točko.  Pritisnite F5, da začnete odpravljati napake.  Pojdite v spletni brskalnik in naložite spletno mesto. Preklopite nazaj na VSCode in videli bi, da se ustavi na vaši prekinitveni točki.

Koda se ne izvaja z lupino zsh

Privzeto je WSL nastavljen za delo z lupino Bash in vidi pot do izvršljive datoteke VSCode v PATH.  Preklopil sem na zsh in VSCode se ne bi več zagnal.  Popravek je bil vstaviti vzdevek .zshrc

$> cd ~
$> koda .zshrc

Dodajte naslednji vzdevek, ki kaže na celotno pot do izvršljive mape kode, kot jo vidi Ubuntu v WSL.  Nadomestite YourUserName z vašim dejanskim uporabniškim imenom za Windows.

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

Zdaj morate znova naložiti konfiguracijo zsh z

$> vir .zshrc

Koda se mora zdaj naložiti iz lupine zsh.

To je to!!  Ti koraki so končno omogočili pravilno odpravljanje napak v Drupalu in VSCode.  Dva dni sem potreboval, da sem vse to ugotovil. Jaz sem noob! Upajmo, da vam to ustreza in vam prihrani nekaj časa.

Samo opomnik na moje okolje.  Windows 10 20H2, Ubuntu 20.04, PHP 7.3, MariaDB 10.4.17, Drupal 8.9.13, Xdebug 3.02, Windows Terminal, VSCode z daljinskim upravljalnikom - WSL in PHP Debug paketi Felix Becker.

Srečno kodiranje!

Kako namestiti in igrati Doom v Linuxu
Uvod v Doom Serija Doom je nastala v devetdesetih letih po izidu prvotnega Dooma. Bil je takojšen hit in od takrat naprej je serija iger prejela števi...
Vulkan za uporabnike Linuxa
Z vsako novo generacijo grafičnih kart vidimo, da razvijalci iger premikajo meje grafične zvestobe in se približujejo fotorealizmu. A kljub vsem kredi...
OpenTTD vs Simutrans
Ustvarjanje lastne simulacije prevoza je lahko zabavno, sproščujoče in izjemno vabljivo. Zato morate preizkusiti čim več iger, da boste našli tisto, k...