Ubuntu

Ubuntu 20.04, WSL2, VSCode un Drupal 8 - “Gotchas” labošana

Ubuntu 20.04, WSL2, VSCode un Drupal 8 - “Gotchas” labošana

Microsoft beidzot ir piegādājis fantastisku risinājumu Linux lietojumprogrammu izstrādei sistēmā Windows.  Windows apakšsistēmu operētājsistēmai Linux, WSL2, ir diezgan viegli uzstādīt un sākt darbu, it īpaši, ja Linux jau ir pazīstams.  Pat ja jūs neesat, ir daudz ļoti labu rakstu par pamata instalēšanas sākšanu un darbību.

Linux PHP lietojumprogrammu izstrāde, izmantojot VSCode operētājsistēmā Windows 10, ir tikpat stabila un vienmērīga, kādu var iegūt. Tomēr vairākas “gotchas”, ar kurām es saskāros, nebija aprakstītas nevienā no rakstiem, kurus atradu par LAMP iestatīšanu Ubuntu un WSL2.

Man bija ierobežota pieredze ar Linux, un es biju ļoti atkarīgs no rakstiem, kurus uzrakstīja tie, kas nāca pirms manis.  Lai gan viņi mani tur nokļuva lielākoties, man radās vairākas problēmas, kā Drupal 8 darboties bez kļūdām un atkļūdot, strādājot VSCode.  Risinājumi tika atrasti internetā ievietoto jautājumu komentāru sadaļās. Tas prasīja daudzas stundas meklēšanu, un es ceru ietaupīt cilvēkus, iepazīstinot ar risinājumiem, kurus atradu šajā vienā rakstā.

Mana vide ir Windows 10 20H2, Ubuntu 20.04, PHP 7.3, MariaDB 10.4.17, Drupal 8.9.13, Xdebug 3.02, Windows termināls, VSCode ar Remote - WSL un PHP atkļūdošana ar Fēliksa Bekera pakotnēm.  Windows terminālā palaidu WSL no Powershell.

Pirms sākam darbu, šeit ir daži ieteikumi, kas var ietaupīt jūsu laiku.

Programmas apt-fast instalēšana un izmantošana apt vietā var patiešām paātrināt instalēšanu un atjaunināšanu.  Kur es dzīvoju, internets ir mazs joslas platums un lēns, un apt-fast ir daudz ātrāks nekā apt.

Izmantojot “WSL Export and Import”, varat “dublēt un atjaunot” savu Linux izplatīšanu. Tāpat kā jebkurai sistēmai, ieteicams vienmēr saglabāt pašreizējo dublējumu.

Mariadb instalē labi, bet nevar restartēt vai iegūt statusu

Mariadb instalācija noritēja labi.  Nav kļūdu vai brīdinājumu.  Kad mēģināju pārbaudīt statusu, es saņēmu kļūdu attiecībā uz sistēmu.

$> systemctl statusa mysql
Sistēma nav sāknēta ar systemd kā init sistēmu (PID 1). Nevar darboties.

Šīs kļūdas iemesls ir tāds, ka Microsoft WSL neatbalsta systemd.  Par laimi, Arkane Systems izveidoja pakotni system-genie, lai iespējotu systemd .  Es iesaku rūpīgi izlasīt viņu tīmekļa lapu, pirms izmēģināt šādus norādījumus, kas ņemti no šīs lapas. Izplatīšanai, kas nav Ubuntu, ir nedaudz atšķirīgas instrukcijas.

Pirmkārt, jums jāinstalē .Tīkls 5.0 izpildlaiks

$> sudo apt-fast atjauninājums
$> sudo sudo apt-fast install -y apt-transport-https
$> sudo apt-fast atjauninājums
$> sudo apt-fast install -y dotnet-sdk-5.0

Tālāk mums jākonfigurē wsl-transdebian repozitorijs

$> sudo apt-fast instalēt 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
$> kaķis << EOF > / etc / apt / sources.sarakstā.d / wsl-transdebian.sarakstā
$> 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 atjauninājums

Tagad mēs varam instalēt sistēmas Genie pakotni.

sudo apt-fast install -y systemd-genie

Izejiet no Linux čaulas, pēc tam izslēdziet WSL no Power shell

PS C: \ Users \ UsrName> wsl - izslēgšana

Restartējiet WSL ar džinu no Powershell uzvednes.

PS C: \ Users \ UsrName> wsl džins - s

Tiks parādīts paziņojums “Gaida sistēmu .. .!!!!!!!!!!!!!!!”.  Lai pilnībā ielādētu, nepieciešamas 180 sekundes.  Vienkārši pagaidiet, kamēr tas beigsies.  Kad tas ir izdarīts, jaunajam čaulas logam vajadzētu izskatīties šādi:

Gaida sistēmu .. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Noildze, gaidot, kamēr systemd nonāks darbības stāvoklī.
Tas var norādīt uz sistēmasd konfigurācijas kļūdu.
Mēģinājums turpināt.

Pārliecinieties, vai instalēts džins un darbojas systemd:

systemctl statuss mariadb

Jums vajadzētu iegūt mariadb statusa izvadi.  Ņemiet vērā, ka darbojas arī systemctl status mysql.

Arkane Systems iesaka izslēgt WSL džins sesiju ar wsl-shutdown.  Tas atbrīvos visu atmiņu, ko Windows izmanto WSL.

Drupal instalē, bet CSS netiek ielādēts

Pēc Drupal 8 pamata instalēšanas palaišanas lapām nebija formatējuma.  Lapas avota skatīšana parādīja, ka netiek ielādēti CSS faili. Man vajadzēja divas dienas, lai to noskaidrotu, bet īss stāsts ir tāds, ka Drupal pieņem, ka apache2 izmanto direktoriju / tmp, taču tas nav.  Pēc noklusējuma apache2 ir konfigurēts izmantot privātu tmp direktoriju.  Dīvainā kārtā sys_get_temp_dir () izsaukšana no php return / tmp, tomēr apache2 to neizmanto.  Kad Drupal izveido savus optimizētos css un js failus, tas vispirms mēģina tos ierakstīt mapē / tmp, pēc tam pārvieto tos uz mērķa mapi, parasti vietnes / default / files / css un / js. Bet apache2 neizmanto / tmp, tāpēc šis process neizdodas, un neviens no css vai js failiem. Noņemot atzīmi no apvienoto CSS un Javascript failu, tas tiks apiets, bet pēc tam tiks ielādēti visi atsevišķi css un js faili, tāpēc tas nav risinājums.

Jūs varat apstiprināt, ka šī problēma / tmp nav pieejama, izmantojot šo vienkāršo php failu. Tas izveido tmpfile un parāda faila nosaukumu.  Sākotnēji faila nosaukums būs tukšs, jo izsaukums uz tmpfile () atgriež NULL.  Es testā ievietoju šādu kodu.php un izsauca to no manas vietnes, localhost / mysite / test.php

atbalss "\ n ";
atbalss "\ n ";
atbalss "Mans otrais PHP piemērs\ n ";
atbalss "\ n ";
atbalss "\ n ";
atbalss "

Apskatot lapas avotu \ r \ n, šajā virknē atradīsit jaunu rindu.";
 
atbalss "

testēšana

";
$ tmpDir = sys_get_temp_dir ();
atbalss "

TMP direkcija = '$ tmpDir'

";
$ fails = tmpfile ();
$ path = stream_get_meta_data ($ fails) ['uri'];
atbalss "

Tmp faila ceļš = '$ path'

";
 
atbalss "\ n ";
atbalss "\ n ";
?>
 
Tā rezultātā tika izveidots "Tmp faila ceļš ="

Es tam atradu risinājumu lietotāja One In the Million Apps komentāros par Stackoverflow jautājumu.  Šis risinājums maina apache2 konfigurāciju no PrivateTmp = true uz PrivateTmp = false. Ņemiet vērā, ka apache2 nomainīšana, lai izmantotu privātu tmp direktoriju, tika veikta drošības apsvērumu dēļ, un lielāko daļu lietotņu var konfigurēt izmantot citu tmp mapi.  Es to izmēģināju kopā ar Drupal, taču nevarēju panākt, lai tas darbotos. Šis ir mans pirmais mēģinājums palaist Drupal operētājsistēmā Linux, un es gribēju, lai manā klēpjdatorā lietas “vienkārši strādātu” ar nelielu rūpību par drošību.

Vispirms meklējiet failu, kurā ir PrivateTmp, izmantojot šo no direktorija / lib:

%> sudo atrast / -mount -type f -exec grep -e "PrivateTmp" '' ';' -druka

Tas man deva garu sērkociņu sarakstu.  Meklējiet to, kas satur failu apache2.apkalpošana.  Manā gadījumā tas tika atrasts vietnē / usr / lib / systemd / system / apache2.apkalpošana.  nokopējiet šo failu uz / utt. direktorijā. Rediģēt / etc / apache2.pakalpojumus un mainiet PrivateTmp = true uz PrivateTmp = false, saglabājiet un restartējiet pakalpojumu apache2.

systemctl restartējiet apache2

Atkārtojiet testu.vēlreiz, un jums jāparāda tmp fails ar nosaukumu, apstiprinot piekļuvi mapei / tmp.

Notīriet visas Drupal kešatmiņas un atkārtoti ielādējiet lapas.  Tagad viņiem vajadzētu parādīties pareizi. Es nezinu, kāpēc, bet Drupal Clear Cache funkcija man ne vienmēr darbojas.  Manuāli visu vietnēs / default / files / css js esošo failu dzēšana, tad kešatmiņas tabulu iztukšošana vienmēr tiek izmantota, izmantojot PhpMyAdmin.

VSCode atkļūdošanas iestatīšana

Konfigurēt Xdebug

Vispirms instalējiet VSCode paketes Remote - WSL un PHP Debug by Felix Becker.

Pēc tam es instalēju Xdebug

sudo apt-fast php7.3-xdebug

Šī instalētā versija 3.02 no Xdebug.

Es mēģināju to konfigurēt, sekojot daudzajiem piemēriem internetā.  Nekas neizdevās.  Izrādās, lielākā daļa piemēru ir domāti Xdebug 2.x, un šie konfigurācijas iestatījumi vairs nedarbojas ar 3.x

Beidzot dabūju to strādāt ar šādu php.ini iestatījumi.

Man abiem / etc / php / 7 bija jāpievieno sekojošais.3 / apache2 / php.ini un / etc / php / 7.3 / cli / php.ini manā sistēmā.

Jūs varat atrast savas xdebug atrašanās vietu.tāpēc, pārejot uz direktoriju / lib direktoriju, pēc tam palaižot

atrast -nosaukums xdebug.tik [xdebug]
zend_extension = ./ lib / php / 20180731 / xdebug.tātad
xdebug.start_with_request = aktivizēt
xdebug.mode = atkļūdošana
xdebug.Discover_client_host = 1
xdebug.log = / tmp / xdebug_remote.žurnāls
xdebug.klienta ports = 9003

Konfigurējiet VSCode

Attālināta atkļūdošana VSCode izmanto palaišanu.json fails, kas saglabāts jūsu projekta direktorija saknē .vscode / palaišana.json.

Jūs varat izveidot palaišanu.json failu, izmantojot VSCode lietotāja interfeisu, taču man ir vieglāk to izveidot manuāli.  Pārejiet uz savas vietnes sakni un izveidojiet .vscode direktorijā. Izveidojiet palaišanu.json failu un ielādējiet to VSCode.

$> mkdir .vscode
$> cd .vscode
$> pieskāriena palaišana.json
$> koda palaišana.json

Ievietojiet failā šo json un saglabājiet to.


// Izmantojiet IntelliSense, lai uzzinātu par iespējamiem atribūtiem.
// Virziet kursoru, lai skatītu esošo atribūtu aprakstus.
// Lai iegūtu papildinformāciju, apmeklējiet vietni: https: // go.microsoft.com / fwlink /?linkid = 830387
"versija": "0.2.0 ",
"konfigurācijas": [

"name": "Klausieties XDebug",
"type": "php",
"pieprasījums": "palaist",
"osta": 9003,
"stopOnEntry": taisnība,
"log": taisnība,
"pathMappings":

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

,

"name": "Palaist pašlaik atvērto skriptu",
"type": "php",
"pieprasījums": "palaist",
"program": "$ file",
"cwd": "$ fileDirname",
"osta": 9003

]

Piezīme sadaļā pathMappings, kur man ir “/ var / www / html”, ir jānorāda pilns ceļš uz savas vietnes sakni.

Aizveriet VSCode. Savā WSL Linux uzvednē pārejiet atpakaļ uz savas vietnes sakni un ielādējiet projektu VSCode.  Pieņemot, ka jūs joprojām esat .vscode direktorijā,

$> cd…
$> kods .

Tam vajadzētu ielādēt projektu VSCode, un kreisajā pusē vajadzētu redzēt pilnu projekta direktoriju koku.  Atveriet sākuma lapu, piemēram, rādītāju.php un pievienojiet pārtraukuma punktu.  Nospiediet F5, lai sāktu atkļūdošanu.  Dodieties uz tīmekļa pārlūku un ielādējiet vietni. Pārslēdzieties atpakaļ uz VSCode, un jums vajadzētu redzēt, ka tas pārtraukts jūsu pārtraukuma punktā.

Kods nedarbojas ar zsh Shell

Pēc noklusējuma WSL ir iestatīts darbam ar Bash apvalku, un tas redz ceļu uz izpildāmo VSCode PATH.  Es pārslēdzos uz zsh, un VSCode vairs nedarbosies.  Labojums bija ievietot aizstājvārdu .zshrc

$> cd ~
$> kods .zshrc

Pievienojiet šādu aizstājvārdu, kas norāda uz pilnu ceļu uz izpildāmo kodu mapi, kā to redzēja Ubuntu WSL.  Nomainiet YourUserName ar savu faktisko Windows lietotāja vārdu.

aizstājvārds code = "/ mnt / c / Users / YourUserName / AppData / Local / Programs / Microsoft \ VS \ Code / bin / code"

Tagad jums ir jāpārlādē zsh konfigurācija ar

$> avots .zshrc

Kods tagad jāielādē no zsh apvalka.

Tieši tā!!  Šīs darbības beidzot man pareizi darbojās ar Drupal un VSCode atkļūdošanu.  Man vajadzēja divas dienas, lai to visu saprastu. Es esmu noob! Cerams, ka tas darbojas jums un ietaupa kādu laiku.

Tikai atgādinājums par manu vidi.  Windows 10 20H2, Ubuntu 20.04, PHP 7.3, MariaDB 10.4.17, Drupal 8.9.13, Xdebug 3.02, Windows termināls, VSCode ar Remote - WSL un PHP atkļūdošana ar Fēliksa Bekera pakotnēm.

Laimīgu kodēšanu!

Kā palielināt FPS Linux?
FPS apzīmē Kadri sekundē. FPS uzdevums ir izmērīt kadru ātrumu video atskaņošanā vai spēļu izrādēs. Vienkāršos vārdos nepārtrauktu pilnekrāna attēlu s...
Populārākās Oculus App Lab spēles
Ja esat Oculus austiņu īpašnieks, jums ir jāsazinās par sānu ielādi. Sānu ielāde ir process, kurā austiņās tiek instalēts saturs, kas nav veikals. Sid...
10 labākās spēles, kuras spēlēt Ubuntu
Windows platforma ir bijusi viena no dominējošajām spēļu platformām, jo ​​mūsdienās tiek attīstīts milzīgs spēļu skaits, lai atbalstītu Windows. Vai k...