„Ubuntu“

„Ubuntu 20“.04, WSL2, VSCode ir Drupal 8 - „Gotchų“ taisymas

„Ubuntu 20“.04, WSL2, VSCode ir Drupal 8 - „Gotchų“ taisymas

„Microsoft“ pagaliau pateikė fantastišką sprendimą, kaip sukurti „Linux“ programas „Windows“ sistemoje.  „Windows“ sistemai skirtą „Linux“ posistemį WSL2 yra gana lengva įdiegti ir pradėti naudoti, ypač jei jau esate susipažinę su „Linux“.  Net jei nesate, yra daug labai gerų straipsnių apie tai, kaip paleisti pagrindinę instaliaciją.

„Linux PHP“ programų kūrimas naudojant „VSCode“ sistemoje „Windows 10“ yra tokia pat stabili ir vientisa patirtis, kokią tik galite gauti. Vis dėlto keletas „getchų“, su kuriomis susidūriau, nebuvo aprašyti nė viename iš mano rastų straipsnių apie LAMP nustatymą „Ubuntu“ ir „WSL2“.

Turėjau ribotą „Linux“ patirtį ir labai priklausiau nuo straipsnių, kuriuos parašė tie, kurie atėjo prieš mane.  Nors jie mane ten patyrė didžiąją dalį kelio, aš susidūriau su keliomis problemomis, kad „Drupal 8“ veiktų be klaidų ir derinant VSCode.  Sprendimai buvo rasti internete paskelbtų klausimų komentarų skiltyse. Tai užtruko daug valandų paieškų, ir tikiuosi, kad išgelbėsiu žmones, pateikdama sprendimus, kuriuos radau šiame viename straipsnyje.

Mano aplinka yra „Windows 10 20H2“, „Ubuntu 20“.04, PHP 7.3, MariaDB 10.4.17, Drupal 8.9.13, Xdebug 3.02, „Windows“ terminalas, VSCode su nuotoliniu būdu - Felixo Beckerio paketų derinimas su WSL ir PHP.  „Windows“ terminale vykdau WSL iš „Powershell“.

Prieš pradedant, pateikiame keletą rekomendacijų, kurios gali sutaupyti jūsų laiko.

Įdiegę ir naudodami „apt-fast“, o ne „apt-fast“, tikrai galite pagreitinti diegimus ir atnaujinimus.  Kur gyvenu, internetas yra mažo pralaidumo ir lėtas, o apt-fast yra daug greitesnis nei apt.

Galite „atsarginę kopiją ir atkurti“ savo „Linux“ platinimą naudodami WSL eksporto ir importo programą. Kaip ir kiekvienoje sistemoje, patartina visada išlaikyti esamą atsarginę kopiją.

„Mariadb“ įdiegia gerai, bet negalima paleisti iš naujo arba gauti būsenos

„Mariadb“ diegimas buvo puikus.  Jokių klaidų ar įspėjimų.  Kai bandžiau patikrinti būseną, gavau klaidą dėl sistemos.

$> systemctl statusas mysql
Sistema nebuvo paleista su „systemd“ kaip „init“ sistema (PID 1). Negali veikti.

Šios klaidos priežastis yra ta, kad „Microsoft“ nepalaiko „systemd“ WSL.  Laimei, „Arkane Systems“ sukūrė paketą „system-genie“, kad įgalintų „systemd“ .  Siūlau atidžiai perskaityti jų tinklalapį, prieš išbandant šias instrukcijas, paimtas iš to puslapio. Yra šiek tiek kitokios nei „Ubuntu“ paskirstymo instrukcijos.

Pirmiausia turite įdiegti .Tinklas 5.0 vykdymo laikas

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

Tada turime sukonfigūruoti wsl-transdebian saugyklą

$> sudo apt-fast įdiekite 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
$> katė << EOF > / etc / apt / sources.sąrašą.d / wsl-transdebian.sąrašą
$> 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 atnaujinimas

Dabar galime įdiegti „system-genie“ paketą.

sudo apt-fast install -y systemd-genie

Išeikite iš „Linux“ apvalkalo, tada išjunkite WSL iš „Power shell“

PS C: \ Users \ UsrName> wsl - išjungimas

Paleiskite WSL su džinu iš „Powershell“ raginimo.

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

Pamatysite „Laukiama sistemos .. .!!!!!!!!!!!!!!!“.  Norint visiškai įkrauti, reikia 180 sekundžių.  Tiesiog palaukite, kol jis baigsis.  Kai tai bus padaryta, naujasis lango langas turėtų atrodyti taip:

Laukiama sistemos d .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Baigėsi laikas, kai laukiama „systemd“ įjungimo būsenos.
Tai gali reikšti „systemd“ konfigūracijos klaidą.
Bandoma tęsti.

Patvirtinkite, kad „genie“ įdiegta ir „systemd“ veikia:

systemctl status mariadb

Turėtumėte gauti mariadb būsenos išvestį.  Atkreipkite dėmesį, kad taip pat veikia „systemctl status mysql“.

„Arkane Systems“ rekomenduoja išjungti WSL genie sesiją su wsl-shutdown.  Tai atlaisvins visą WSL naudojamą atmintį sistemoje „Windows“.

„Drupal“ įdiegia, bet CSS neįkeliama

Paleidus pagrindinį „Drupal 8“ diegimą, puslapiai nebuvo formatuojami.  Puslapio šaltinio peržiūra parodė, kad nebuvo įkelta CSS failų. Užtrukau dvi dienas, kol išsiaiškinau šį tą, tačiau apysaka yra ta, kad Drupalas mano, kad apache2 naudoja / tmp katalogą, tačiau tai nėra.  Pagal numatytuosius nustatymus apache2 sukonfigūruotas naudoti privatų tmp katalogą.  Kaip bebūtų keista, sys_get_temp_dir () iš php return / tmp, tačiau tai nėra tai, ką naudoja apache2.  Kai „Drupal“ sukuria optimizuotus css ir js failus, jis pirmiausia bando juos įrašyti į / tmp aplanką, tada perkelia juos į paskirties aplanką, paprastai svetaines / default / files / css ir / js. Bet apache2 nenaudoja / tmp, todėl šis procesas nepavyksta ir nė vienas iš css ar js failų. Panaikinus žymėjimą „Apibendrinti CSS ir„ Javascript “failai, tai bus apeita, bet tada bus įkelti visi atskiri„ css “ir„ js “failai, taigi tai nėra sprendimas.

Galite patvirtinti, kad ši problema / tmp nėra pasiekiama naudodami šį paprastą php failą. Tai sukuria tmpfile ir rodo failo pavadinimą.  Iš pradžių failo pavadinimas bus tuščias, nes iškvietimas į tmpfile () grąžins NULL.  Aš išbandžiau šį kodą.php ir paskambino iš mano svetainės, localhost / mysite / test.php

aidas "\ n ";
aidas "\ n ";
aidas "Antrasis mano PHP pavyzdys\ n ";
aidas "\ n ";
aidas "\ n ";
aidas "

Peržiūrėję puslapio šaltinį \ r \ n šioje eilutėje rasite naują eilutę.";
 
aidas "

testavimas

";
$ tmpDir = sys_get_temp_dir ();
aidas "

TMP direktorija = '$ tmpDir'

";
$ file = tmpfile ();
$ path = stream_get_meta_data ($ failas) ['uri'];
aidas "

Tmp failo kelias = '$ kelias'

";
 
aidas "\ n ";
aidas "\ n ";
?>
 
Dėl to atsirado „tmp failo kelias =“

Tai radau „One In a Million Apps“ vartotojo „Stackoverflow“ klausimo komentaruose.  Šis sprendimas pakeičia apache2 konfigūraciją iš PrivateTmp = true į PrivateTmp = false. Atminkite, kad apache2 pakeisti privačiu tmp katalogu buvo padaryta saugumo sumetimais, o daugumą programų galima sukonfigūruoti naudoti kitą tmp aplanką.  Išbandžiau tai su „Drupal“, bet nepavyko pasiekti, kad jis veiktų. Tai yra mano pirmasis bandymas paleisti „Drupal“ sistemoje „Linux“, ir aš norėjau, kad mano nešiojamajame kompiuteryje viskas „veiktų“, mažai rūpindamasi saugumu.

Pirmiausia ieškokite failo, kuriame yra „PrivateTmp“, naudodami tai iš katalogo / lib:

%> sudo rasti / -mount -type f -exec grep -e "PrivateTmp" '' ';' -spauda

Tai man davė ilgą rungtynių sąrašą.  Ieškokite to, kuriame yra failas apache2.paslaugą.  Mano atveju jis buvo rastas / usr / lib / systemd / system / apache2.paslaugą.  nukopijuokite šį failą į / etc. kataloge. Redaguoti / etc / apache2.paslaugas ir pakeiskite „PrivateTmp“ = „true“ į „PrivateTmp“ = „false“, išsaugokite ir iš naujo paleiskite „apache2“ paslaugą.

systemctl paleiskite iš naujo apache2

Pakartokite testą.php puslapis vėl, ir jūs turėtumėte rodyti tmp failą pavadinimu, patvirtinantį prieigą prie / tmp aplanko.

Išvalykite visas „Drupal“ talpyklas ir iš naujo įkelkite puslapius.  Dabar jie turėtų būti rodomi teisingai. Nežinau kodėl, bet „Drupal Clear Cache“ funkcija man ne visada veikia.  Neautomatiškai ištrinti visus failus iš svetainių / default / files / css js, tada talpyklos lentelių ištuštinimas naudojant „PhpMyAdmin“ visada veikia.

VSCode derinimo nustatymas

Konfigūruokite „Xdebug“

Pirmiausia į VSCode įdiekite Felixo Beckerio paketus „Remote - WSL“ ir „PHP Debug“.

Tada įdiegiau „Xdebug“

sudo apt-fast php7.3-xdebug

Ši įdiegta 3 versija.02 iš „Xdebug“.

Pabandžiau sukonfigūruoti vadovaudamasi daugybe pavyzdžių internete.  Niekas neveikė.  Pasirodo, dauguma pavyzdžių yra „Xdebug 2“.x ir šie konfigūracijos parametrai nebeveikia su 3.x

Pagaliau gavau darbą su tokiu php.ini nustatymai.

Aš turėjau pridėti šiuos duomenis prie / etc / php / 7.3 / apache2 / php.ini ir / etc / php / 7.3 / cli / php.ini mano sistemoje.

Galite rasti savo „xdebug“ vietą.taigi pereidami prie katalogo failo / lib, tada paleiskite

rasti -name xdebug.taip [xdebug]
zend_extension = ./ lib / php / 20180731 / xdebug.taip
xdebug.start_with_request = sukelti
xdebug.mode = derinti
xdebug.Discover_client_host = 1
xdebug.log = / tmp / xdebug_remote.žurnalas
xdebug.kliento_portas = 9003

Konfigūruokite VSCode

Nuotolinis derinimas VSCode naudoja paleidimą.json failas, saugomas jūsų projekto katalogo šaknyje .vscode / paleidimas.Json.

Galite sukurti paleidimą.json failą per VSCode vartotojo sąsają, bet man lengviau sukurti rankiniu būdu.  Pereikite prie savo svetainės šaknies ir sukurkite .vscode katalogas. Sukurkite paleidimą.json failą ir įkelkite jį į VSCode.

$> mkdir .vscode
$> cd .vscode
paleidimas palietus.Json
$> kodo paleidimas.Json

Į failą įdėkite šį „Json“ ir išsaugokite.


// Norėdami sužinoti apie galimus atributus, naudokite „IntelliSense“.
// Užveskite pelės žymeklį, jei norite peržiūrėti esamų atributų aprašus.
// Norėdami gauti daugiau informacijos, apsilankykite: https: // go.„Microsoft“.com / fwlink /?linkid = 830387
"versija": "0.2.0 ",
"konfigūracijos": [

"name": "Klausyk XDebug",
"type": "php",
"užklausa": "paleisti",
„uostas“: 9003,
„stopOnEntry“: tiesa,
„log“: tiesa,
"pathMappings":

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

,

"name": "Paleisti šiuo metu atidarytą scenarijų",
"type": "php",
"užklausa": "paleisti",
"program": "$ file",
"cwd": "$ fileDirname",
„uostas“: 9003

]

Pastaba, esanti „pathMappings“, kur aš turiu „/ var / www / html“, turėtumėte įvesti visą kelią į savo svetainės šaknį.

Uždarykite VSCode. Savo WSL Linux raginime grįžkite į savo svetainės šaknį ir įkelkite projektą į VSCode.  Darant prielaidą, kad vis dar esate .vscode katalogas,

$> cd…
$> kodas .

Tai turėtų įkelti projektą į VSCode, o kairėje turėtumėte pamatyti visą savo projekto katalogo medį.  Atidarykite savo pradinį puslapį, pvz., Rodyklę.php ir pridėkite lūžio tašką.  Norėdami pradėti derinti, paspauskite F5.  Eikite į interneto naršyklę ir įkelkite svetainę. Perjunkite atgal į VSCode ir turėtumėte pamatyti, kad jis sustojo jūsų lūžio taške.

Kodas neveikia su „zsh Shell“

Pagal numatytuosius nustatymus WSL yra nustatytas dirbti su „Bash“ apvalkalu ir jis mato kelią į vykdomąjį VSCode PATH.  Aš perėjau į zsh, ir VSCode nebebus paleistas.  Ištaisyti reikėjo įterpti slapyvardį .zshrc

$> cd ~
$> kodas .zshrc

Pridėkite šį slapyvardį, kuris nurodo visą kodo vykdomojo aplanko kelią, kaip matė „Ubuntu“ WSL.  Pakeiskite „YourUserName“ tikruoju „Windows“ vartotojo vardu.

slapyvardžio kodas = "/ mnt / c / Vartotojai / Jūsų vartotojo vardas / Programos duomenys / Vietinis / Programos /" Microsoft \ VS "kodas / bin / kodas"

Dabar turite iš naujo įkelti „zsh“ konfigūraciją

$> šaltinis .zshrc

Dabar kodas turėtų būti įkeltas iš zsh apvalkalo.

Viskas!!  Šie veiksmai pagaliau paskatino „Drupal“ ir „VSCode“ derinimą tinkamai veikti.  Tai užtruko dvi dienas, kol visa tai išsiaiškinau. Aš esu noobas! Tikimės, kad tai tinka jums ir sutaupo šiek tiek laiko.

Tik priminimas apie mano aplinką.  „Windows 10 20H2“, „Ubuntu 20“.04, PHP 7.3, MariaDB 10.4.17, Drupal 8.9.13, Xdebug 3.02, „Windows“ terminalas, VSCode su nuotoliniu būdu - Felixo Beckerio paketų WSL ir PHP derinimas.

Laimingo kodavimo!

„Microsoft Sculpt Touch“ belaidžio pelės apžvalga
Neseniai skaičiau apie „Microsoft Sculpt Touch“ belaidę pelę ir nusprendė ją nusipirkti. Kurį laiką naudojęs, nusprendžiau pasidalinti savo patirtimi....
„AppyMouse“ ekrano „Trackpad“ ir pelės žymeklis, skirtas „Windows“ tabletėms
Planšetinių kompiuterių vartotojai dažnai praleidžia pelės žymeklį, ypač kai įprasta naudoti nešiojamus kompiuterius. Jutiklinio ekrano išmanieji tele...
Vidutinis pelės mygtukas neveikia sistemoje „Windows 10“
The vidurinis pelės mygtukas padeda naršyti ilgus tinklalapius ir ekranus, kuriuose yra daug duomenų. Jei tai sustos, gerai, jūs naudosite klaviatūrą ...