Ubuntu

Ubuntu 20.04, WSL2, VSCode ve Drupal 8 - “Gotchas”ı Düzeltme

Ubuntu 20.04, WSL2, VSCode ve Drupal 8 - “Gotchas”ı Düzeltme

Microsoft nihayet Windows üzerinde Linux uygulamaları geliştirmek için harika bir çözüm sundu.  Linux için Windows Alt Sistemi, WSL2'yi kurmak, kurmak ve çalıştırmak oldukça kolaydır, özellikle de zaten Linux'a aşina iseniz.  Değilseniz bile, temel bir kurulumu başlatmak ve çalıştırmak hakkında çok iyi makaleler var.

Windows 10'da VSCode kullanarak Linux PHP uygulamaları geliştirmek, bir kişinin alabileceği kadar kararlı ve sorunsuz bir deneyimdir. Yine de, Ubuntu ve WSL2'de LAMP kurulumu hakkında bulduğum makalelerin hiçbirinde karşılaştığım birkaç "kaçırma" anlatılmadı.

Linux ile sınırlı deneyimim vardı ve benden önce gelenlerin yazdığı makalelere büyük ölçüde bağımlıydım.  Beni çoğu yere götürürken, Drupal 8'in hatasız çalışmasını ve VSCode'da hata ayıklamasını sağlamak için birkaç sorunla karşılaştım.  Çözümler internette yayınlanan soruların yorum bölümlerinde bulundu. Bu, saatlerce arama sürdü ve  Bu tek makalede bulduğum çözümleri sunarak insanları kurtarmayı umuyorum.

Ortamım  Windows 10 20H2, Ubuntu 20.04, PHP 7.3, MariaDB 10.4.17, Drupal8.9.13, Xdebug 3.02, Windows Terminali, Uzaktan Kumandalı VSCode - Felix Becker paketleri tarafından WSL ve PHP Hata Ayıklama.  Windows Terminalinde Powershell'den WSL çalıştırıyorum.

Başlamadan önce, size zaman kazandırabilecek birkaç öneri.

Apt yerine apt-fast yüklemek ve kullanmak, yüklemeleri ve güncellemeleri gerçekten hızlandırabilir.  Yaşadığım yerde, internet bant genişliği düşük ve yavaş ve apt-fast apt'den çok daha hızlı.

WSL Export and Import'u kullanarak Linux dağıtımınızı "yedekleyebilir ve geri yükleyebilirsiniz". Herhangi bir sistemde olduğu gibi, her zaman güncel bir yedek bulundurmanız önerilir.

Mariadb İyi Yükleniyor, ancak Yeniden Başlatılamıyor veya Durum Alınamıyor

Mariadb kurulumu iyi gitti.  Hata veya uyarı yok.  Durumu kontrol etmeye çalıştığımda sistemle ilgili bir hata aldım.

$>systemctl durumu mysql
Sistem, init system (PID 1) olarak systemd ile başlatılmadı. çalıştırılamıyor.

Bu hatanın nedeni, Microsoft'un WSL'de systemd'yi desteklememesidir.  Neyse ki Arkane Systems, systemd'yi etkinleştirmek için bir system-genie paketi oluşturdu .  Bu sayfadan alınan aşağıdaki talimatları denemeden önce web sayfalarını iyice okumanızı öneririm. Ubuntu dışındaki dağıtımlar için biraz farklı talimatlar var.

İlk olarak, yüklemeniz gerekir .ağ 5.0 çalışma zamanı

$>sudo apt-hızlı güncelleme
$>sudo sudo apt-hızlı kurulum -y apt-transport-https
$>sudo apt-hızlı güncelleme
$>sudo apt-hızlı kurulum -y dotnet-sdk-5.0

Sonra wsl-transdebian Deposunu Yapılandırmamız gerekiyor

$>sudo apt-hızlı kurulum apt-transport-https
$>wget -O /etc/apt/güvenilir.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg
$>chmod a+r /etc/apt/güvenilir.gpg.d/wsl-transdebian.gpg
$>kedi << EOF > /etc/apt/sources.liste.d/wsl-transdebian.liste
$>deb https://arkane-systems.github.io/wsl-transdebian/apt/ bullseye ana
$>deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ bullseye ana
$>apt-hızlı güncelleme

Artık system-genie paketini kurabiliriz.

sudo apt-hızlı kurulum -y systemd-genie

Linux kabuğunuzdan çıkın, ardından WSL'yi Power kabuğundan kapatın

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

Powershell isteminden bir cin ile WSL'yi yeniden başlatın.

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

“Sistem bekleniyor… .!!!!!!!!!!!!!!!”.  Tamamen yüklenmesi 180 saniye sürer.  sadece bitmesini bekle.  Tamamlandığında, yeni kabuk pencereniz şöyle görünmelidir:

systemd bekleniyor.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Systemd'nin çalışma durumuna girmesi beklenirken zaman aşımına uğradı.
Bu bir systemd yapılandırma hatasını gösterebilir.
devam etmeye çalışmak.

Genie'nin kurulu olduğunu ve systemd'nin çalıştığını doğrulayın:

systemctl durumu mariadb

mariadb için durum çıktısını almalısınız.  systemctl status mysql'nin de çalıştığını unutmayın.

Arkane Systems, WSL genie oturumunuzu wsl -shutdown ile kapatmanızı önerir.  Bu, Windows'ta WSL tarafından kullanılan tüm belleği boşaltacaktır.

Drupal yükleniyor Ama CSS Yüklenmiyor

Drupal 8 için temel kurulumu çalıştırdıktan sonra, sayfaların biçimlendirmesi yoktu.  Sayfa Kaynağını görüntülemek, hiçbir CSS dosyasının yüklenmediğini gösterdi. Bunu çözmem iki günümü aldı, ancak kısa hikaye Drupal, apache2'nin /tmp dizinini kullandığını varsayıyor, ancak değil.  Varsayılan olarak apache2, özel bir tmp dizini kullanacak şekilde yapılandırılmıştır.  Garip bir şekilde, php return /tmp'den sys_get_temp_dir() çağrısı, apache2'nin kullandığı şey bu değil.  Drupal, optimize edilmiş css ve js dosyalarını oluşturduğunda, önce bunları /tmp klasörüne yazmaya çalışır, ardından bunları hedef klasöre, genellikle siteler/varsayılan/dosyalar/css ve /js'ye taşır. Ancak apache2 /tmp kullanmıyor, bu nedenle bu işlem başarısız oluyor ve css veya js dosyalarının hiçbiri. Toplu CSS ve Javascript dosyalarının işaretini kaldırmak bunu atlayacaktır, ancak daha sonra tüm bireysel css ve js dosyaları yüklenir, bu nedenle bu bir çözüm değildir.

Aşağıdaki basit php dosyasıyla bu sorunun /tmp'ye erişilemediğini onaylayabilirsiniz. Bir tmp dosyası oluşturur ve dosya adını görüntüler.  Başlangıçta, tmpfile() çağrısı NULL döndürdüğü için dosya adı boş olacaktır.  Aşağıdaki kodu teste koydum.php ve sitemden çağırdı, localhost/mysite/test.php

Eko "\n";
Eko "\n";
Eko "İkinci PHP Örneğim\n";
Eko "\n";
Eko "\n";
Eko "

Sayfa kaynağını \r\n görüntülerseniz bu dizede yeni bir satır bulacaksınız.";
 
Eko "

test yapmak

";
$tmpDir = sys_get_temp_dir();
Eko "

TMP dizini = '$tmpDir'

";
$dosya = tmpfile();
$yol = stream_get_meta_data($dosya)['uri'];
Eko "

tmp dosyasının yolu = '$path'

";
 
Eko "\n";
Eko "\n";
?>
 
Bu, "tmp dosyasının yolu =" ile sonuçlandı

Milyonda Bir Uygulamada Bir kullanıcı tarafından Stackoverflow sorusunun yorumlarında buna bir çözüm buldum.  Bu çözüm, apache2 yapılandırmasını PrivateTmp=true'dan PrivateTmp=false'a değiştirir. Apache2'yi özel bir tmp dizini kullanacak şekilde değiştirmenin güvenlik nedenleriyle yapıldığını ve çoğu uygulamanın farklı bir tmp klasörü kullanacak şekilde yapılandırılabileceğini unutmayın.  Bunu Drupal ile denedim ama çalıştıramadım. Bu, Linux'ta Drupal'ı çalıştırmaya yönelik ilk denemem ve güvenlik için çok az endişe duyarak dizüstü bilgisayarımda bazı şeylerin "sadece çalışmasını" istedim.

İlk olarak, /lib dizininden bunu kullanarak PrivateTmp içeren dosyayı arayın:

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

Bu bana uzun bir eşleşme listesi verdi.  apache2 dosyasını içeren dosyayı arayın.hizmet.  Benim durumumda /usr/lib/systemd/system/apache2 konumunda bulundu.hizmet.  bu dosyayı /etc dizinine kopyalayın. dizin. /etc/apache2'yi düzenleyin.hizmetler ve PrivateTmp=true öğesini PrivateTmp=false olarak değiştirin, apache2 hizmetini kaydedin ve yeniden başlatın.

systemctl apache2'yi yeniden başlat

Testi yeniden çalıştırın.php sayfasını tekrar açın ve /tmp klasörüne erişimi onaylayan, görüntülenen adlı tmp dosyasını almalısınız.

Tüm Drupal önbelleklerini temizleyin ve sayfaları yeniden yükleyin.  Artık doğru bir şekilde görüntülenmeleri gerekir. Nedenini bilmiyorum ama Drupal Clear Cache işlevi her zaman benim için çalışmıyor.  Siteler/varsayılan/dosyalar/css js içindeki tüm dosyaları manuel olarak silmek, ardından önbellek tablolarını boşaltmak için PhpMyAdmin'i kullanmak her zaman işe yarar.

VSCode Hata Ayıklamayı Ayarlama

Xdebug'u yapılandırın

Öncelikle Remote - WSL ve Felix Becker tarafından PHP Debug paketlerini VSCode'a kurun.

Daha sonra Xdebug'u kurdum

sudo apt-hızlı php7.3-xhata ayıklama

Bu yüklü sürüm 3.Xdebug'un 02'si.

İnternetteki birçok örneği takip ederek yapılandırmayı denedim.  Hiçbir şey çalışmadı.  Örneklerin çoğunun Xdebug 2 için olduğu ortaya çıktı.x ve bu yapılandırma ayarları artık 3 ile çalışmıyor.x

Sonunda aşağıdaki php ile çalışmasını sağladım.ini ayarları.

Aşağıdakileri her iki /etc/php/7 dosyasına eklemek zorunda kaldım.3/apache2/php.ini ve /etc/php/7.3/cli/php.sistemimde ini.

xdebug'ınızın konumunu bulabilirsiniz.bu yüzden /lib dizin dosyasına gidip çalıştırarak

bul -name xdebug.yani [xdebug]
zend_extension = ./lib/php/20180731/xdebug.yani
xdebug.start_with_request = tetikleyici
xdebug.mod = hata ayıklama
xdebug.Discover_client_host = 1
xdebug.günlük = /tmp/xdebug_remote.günlük
xdebug.client_port = 9003

VSCode'u yapılandırın

VSCode'da uzaktan hata ayıklama bir başlatma kullanır.proje dizininizin kökünde depolanan json dosyası .vscode/lansman.json.

Lansmanı oluşturabilirsiniz.json dosyasını VSCode UI aracılığıyla oluşturabilirsiniz, ancak manuel olarak oluşturmayı daha kolay buluyorum.  Web sitenizin köküne gidin ve bir .vscode dizini. Lansman oluştur.json dosyası oluşturun ve VSCode'a yükleyin.

$>mkdir .vs kodu
$>cd .vs kodu
$>dokunmatik başlatma.json
$>kod başlatma.json

Aşağıdaki json'u dosyaya koyun ve kaydedin.


// Olası öznitelikler hakkında bilgi edinmek için IntelliSense'i kullanın.
// Varolan özelliklerin açıklamalarını görüntülemek için fareyle üzerine gelin.
// Daha fazla bilgi için şu adresi ziyaret edin: https://go.microsoft.com/fwlink/?bağlantılı=830387
"sürüm": "0.2.0",
"yapılandırmalar": [

"name": "XDebug için dinle",
"tür": "php",
"istek": "başlat",
"bağlantı noktası": 9003,
"stopOnEntry": doğru,
"günlük": doğru,
"pathMappings":

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

,

"name": "Şu anda açık olan komut dosyasını başlat",
"tür": "php",
"istek": "başlat",
"program": "$dosya",
"cwd": "$fileDirname",
"bağlantı noktası": 9003

]

“/var/www/html” bulunduğum pathMappings altında, web sitenizin kök dizinine tam yolu koymalısınız.

VSCode'u kapat. WSL Linux isteminizde web sitenizin köküne geri dönün ve projeyi VSCode'a yükleyin.  Hala içinde olduğunuzu varsayarsak .vscode dizini,

$>cd…
$>kod .

Bu, projeyi VSCode'a yüklemeli ve projenizin tam dizin ağacını solda görmelisiniz.  İndeks gibi başlangıç ​​sayfanızı açın.php ve bir kesme noktası ekleyin.  Hata ayıklamaya başlamak için F5'e basın.  Bir web tarayıcısına gidin ve siteyi yükleyin. VSCode'a geri dönün ve kesme noktanızda durduğunu görmelisiniz.

Kod zsh Shell ile Çalışmıyor

Varsayılan olarak, WSL, Bash kabuğuyla çalışacak şekilde ayarlanmıştır ve PATH'de yürütülebilir VSCode'un yolunu görür.  zsh'a geçtim ve VSCode artık çalışmayacaktı.  Düzeltme, bir takma ad koymaktı .zshrc

$>cd ~
$>kod .zshrc

WSL'de Ubuntu tarafından görüldüğü gibi, kod yürütülebilir klasörünün tam yolunu gösteren aşağıdaki takma adı ekleyin.  YourUserName'i gerçek Windows kullanıcı adınızla değiştirin.

takma ad kodu="/mnt/c/Users/KullanıcıAdınız/AppData/Local/Programs/Microsoft\ VS\ Code/bin/code"

Şimdi zsh yapılandırmasını ile yeniden yüklemeniz gerekiyor

$>kaynak .zshrc

Kod şimdi zsh kabuğundan yüklenmelidir.

Bu kadar!!  Bu adımlar sonunda Drupal ve VSCode hata ayıklamasının benim için doğru şekilde çalışmasını sağladı.  Bütün bunları anlamam iki günümü aldı. ben bir acemiyim! Umarım, bu sizin için çalışır ve size biraz zaman kazandırır.

Sadece çevremin bir hatırlatıcısı.  Windows 10 20H2, Ubuntu 20.04, PHP 7.3, MariaDB 10.4.17, Drupal8.9.13, Xdebug 3.02, Windows Terminali, Uzaktan Kumandalı VSCode - Felix Becker paketleriyle WSL ve PHP Hata Ayıklama.

mutlu kodlama!

Microsoft Sculpt Touch Wireless Mouse Review
I recently read about the Microsoft Sculpt Touch wireless mouse and decided to buy it. After using it for a while, I decided to share my experience wi...
AppyMouse On-screen Trackpad and Mouse Pointer for Windows Tablets
Tablet users often miss the mouse pointer, especially when they are habitual to using the laptops. The touchscreen Smartphones and tablets come with m...
Middle mouse button not working in Windows 10
The middle mouse button helps you scroll through long webpages and screens with a lot of data. If that stops, well you will end up using the keyboard ...