Artisan sorunlarını giderme
Bir bakışta
“Bir bakışta” başlıklı bölümHer köprü hatası, türlendirilmiş bir istisna olarak görünür. İstisnayı ve iletiyi aşağıdaki tabloyla eşleştirin. Her satır, hatayı fırlatan kaynak denetimini gösterir; böylece belirtiyi değil nedeni düzeltebilirsiniz.
İstisnaya göre tanılama
“İstisnaya göre tanılama” başlıklı bölümChromeNotAvailableException
“ChromeNotAvailableException” başlıklı bölüm
chrome-php/chrome is not installed. Install it via: composer require chrome-php/chrome:^1.15
Chrome DevTools Protocol (CDP) istemci kitaplığı otomatik yükleyicide bulunmuyor. BrowserPool::getBrowser() bu istisnayı Chrome başlatılmadan önce fırlatır. Kurulum komutunu çalıştırın. Bu durum, eksik bir ikili dosya sorunundan farklıdır: kitaplık denetimi ve ikili dosya denetimi ayrı aşamalarda çalışır.
ChromeRenderException — başlatma veya zaman aşımı
“ChromeRenderException — başlatma veya zaman aşımı” başlıklı bölüm
Chrome renderer failed: <cause>
Chrome başlatılamadı, zaman aşımına uğradı veya çöktü. Önceki istisna, asıl nedeni içerir. Şu yaygın nedenleri denetleyin:
- İkili dosya bulunamadı / çalıştırılabilir değil. Bunu
chromium --headless --dump-dom about:blankile doğrulayın.chrome_binarydeğerini mutlak yola ayarlayın. - Korumalı alan başlatılamıyor (kapsayıcılar). Nedende korumalı alan veya ad alanı geçer. Mümkünse korumalı alan destekli bir kapsayıcı kullanın veya /integrations/artisan/security-and-operations/. sayfasını okuduktan sonra
no_sandbox: trueolarak ayarlayın. - Zaman aşımı. Ağır bir belge
render_timeoutdeğerini aştı. Bu iş yükü için zaman aşımını yükseltin veya belgeyi küçültün. Kullanıcıya açık bir yolda, hizmet engelleme açısından ödünleşimi değerlendirin. - Eksik paylaşılan kitaplıklar. Chrome hemen sonlanır. Dağıtımınız için Chrome bağımlılık kümesini kurun.
ChromeRenderException — boş çıktı
“ChromeRenderException — boş çıktı” başlıklı bölüm
Chrome printToPDF returned empty data
Chrome başladı, ancak printToPDF sıfır bayt döndürdü. Yaygın neden, boş bir gövde ya da display:none olarak ayarlanmış içerik gibi işlenmiş bir kutu oluşturmayan bir giriş veya yazdırma sırasında Chrome’un çökmesidir. Hypertext Markup Language (HTML) girişinin görünür bir kutuya işlendiğini doğrulayın. Ana makinedeki bellek baskısını denetleyin.
RuntimeException — Chrome öncesinde giriş reddedildi
“RuntimeException — Chrome öncesinde giriş reddedildi” başlıklı bölüm| İletide geçen | Neden | Çözüm |
|---|---|---|
exceeds maximum allowed size | HTML, şu değeri aşıyor: maxHtmlSize | Girişi küçültün veya max_html_size değerini yükseltin (kaynak tüketimi yüzeyini genişletir) |
oversized base64 data URI | Satır içi base64 data Uniform Resource Identifier (URI) değeri ≥ 13 MB | Gömülü varlığı küçültün; daha küçük bir görsele başvurun |
forbidden meta refresh redirect | <meta http-equiv="refresh"> mevcut | Etiketi kaldırın; bir sunucu tarafı istek sahteciliği (SSRF) gezinme vektörüdür ve her zaman reddedilir |
Bu hatalar ChromeSecurityPolicy::validate() çağrısından kaynaklanır ve Chrome ile iletişim kurulmadan önce tetiklenir; bu nedenle testlerde kapsanmaları hızlı ve düşük maliyetlidir.
PdfParseException
“PdfParseException” başlıklı bölüm
Page <n> has no content stream
Chrome, ayrıştırıcının sayfa çıkaramadığı bir Portable Document Format (PDF) dosyası üretti. Bu durum nadirdir ve genellikle bozuk Chrome çıktısına ya da beklenmedik yapıya sahip bir Chrome sürümüne işaret eder. Chrome sürümünü ve girişi kayda alın. İkili dosyanın desteklenen bir Chrome/Chromium derlemesi olduğunu doğrulayın.
Uzak varlıklar boş işleniyor
“Uzak varlıklar boş işleniyor” başlıklı bölümBu bir hata değildir. Köprü, her alt kaynak getirme işlemini Content Security Policy (CSP) default-src 'none' ve CDP tarafındaki setBlockedURLs('*') engellemesiyle engeller. Uzak <img> öğeleri, stil sayfaları, yazı tipleri, betikler ve iframe’ler yüklenmez. Varlıkları data: URI’leri olarak, Cascading Style Sheets (CSS) öğelerini de defaultCss veya <style> aracılığıyla satır içine alın. Ağ modeli için /integrations/artisan/security-and-operations/. sayfasına bakın.
İçerik altta kırpılıyor
“İçerik altta kırpılıyor” başlıklı bölümBelge ikinci bir Chrome sayfasına taştı ve köprü yalnızca sayfa 0’ı içe aktardı. Otomatik sığdırma arabelleği, olağandışı uzun bir yeniden akış için fazla küçüktü ya da açık yükseklik fazla düşüktü. İçeriğe göre boyutlandırılmış açık bir yükseklik ayarlayın ya da güvenlik arabelleğiyle otomatik sığdırmayı kullanmak için açık yüksekliği kaldırın. Yükseklik işleme için /integrations/artisan/production-usage/. sayfasına bakın.
Her ~100 işlemede gecikme artışı
“Her ~100 işlemede gecikme artışı” başlıklı bölümBu beklenen bir davranıştır. BrowserPool, belleği sınırlamak için Chrome’u her 100 işlemede yeniden başlatır. notice düzeyinde bir günlük satırı, yeniden başlatmayı ve işlem sayısını kaydeder. Bunu hizmet düzeyi hedefleri (SLO’lar) açısından bir olay olarak değil, bilinen periyodik bir maliyet olarak değerlendirin. Her 100 işlemeden daha sık bir yeniden başlatma oranı, belgelerin beklenenden daha ağır olduğu anlamına gelir.
Uzun bir toplu işte bellek artıyor
“Uzun bir toplu işte bellek artıyor” başlıklı bölümBrowserPool, 100 işlemde bir yeniden başlatmayla büyümeyi sınırlar; ancak çok uzun süre çalışan bir işçi yine de bellek biriktirebilir. Chrome’u erkenden geri dönüştürmek için büyük toplu işler arasında close() çağırın ve işçiyi bir ana makine bellek sınırı altında çalıştırın.
Tanılama kontrol listesi
“Tanılama kontrol listesi” başlıklı bölüm- Giriş sorunlarını ortam sorunlarından ayırmak için sorunu küçük ve güvenilir bir HTML parçasıyla yeniden oluşturun.
- Ana makinede işçi kullanıcısıyla
chromium --headless --dump-dom about:blankkomutunu çalıştırın. - Bir PHP Standards Recommendation 3 (PSR-3) günlükleyici ekleyin ve ikili dosya yolu ile yeniden başlatma sayısı dahil olmak üzere
info/noticesatırlarını okuyun. - Şunun kurulu olduğunu doğrulayın:
chrome-php/chromepaketi kullanılabilir olduğundaBrowserPool::getBrowser()şunu fırlatmaz:ChromeNotAvailableException. - Temeldeki Chrome nedenini görmek için istisnanın önceki istisnasını denetleyin.
Ayrıca bakınız
“Ayrıca bakınız” başlıklı bölüm- /integrations/artisan/install/
- /integrations/artisan/configuration/
- /integrations/artisan/security-and-operations/
- /integrations/artisan/chrome-renderer-setup/
- /integrations/artisan/production-usage/