मैं उपयोग कर रहा हूँ laravel कैशिंग (remember()
विधि) को पढ़ने में नाकाम रहने के:Laravel कभी कभी कैश इस तरह एक कोड के साथ एक वेबसाइट पर
$postedItems = Cache::remember('home_posted_items', $this->cacheTimes['postedItems'], function() {
/* the stuff that prepares data */
return ['items' => $items, 'firstItemNumber' => $firstItem];
});
समस्या यह है कि कभी कभी (हर कुछ दिन, मैं कहता हूँ चाहते हैं) है कैश्ड फ़ाइल दूषित हो जाती है और नतीजतन मेरे पास कैश समाप्त होने तक डाउनटाइम होता है (जब तक कि मैं इसे मैन्युअल रूप से साफ़ नहीं करता)।
[2017-02-04 22:01:34] production.ERROR: ErrorException: unserialize(): Error at offset 131059 of 131062 bytes in /home/path/to/app/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php:78
Stack trace:
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'unserialize(): ...', '/home/path/to/...', 78, Array)
#1 /home/path/to/app/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php(78): unserialize('a:2:{s:7:"item...')
#2 /home/path/to/app/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php(47): Illuminate\Cache\FileStore->getPayload('home_posted_ite...')
#3 /home/path/to/app/vendor/laravel/framework/src/Illuminate/Cache/Repository.php(98): Illuminate\Cache\FileStore->get('home_posted_ite...')
#4 /home/path/to/app/vendor/laravel/framework/src/Illuminate/Cache/Repository.php(202): Illuminate\Cache\Repository->get('home_posted_ite...')
#5 [internal function]: Illuminate\Cache\Repository->remember('home_posted_ite...', 1, Object(Closure))
#6 /home/path/to/app/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php(318): call_user_func_array(Array, Array)
#7 /home/path/to/app/bootstrap/cache/compiled.php(6089): Illuminate\Cache\CacheManager->__call('remember', Array)
#8 /home/path/to/app/app/Http/Controllers/HomeController.php(197): Illuminate\Support\Facades\Facade::__callStatic('remember', Array)
कैसे इस समस्या को हल करने के लिए:
यहाँ त्रुटि ढेर संगत हो सकती का एक हिस्सा है?
अनुभव से मुझे पता है कि कैश साफ़ करने से समस्या हल हो जाती है। तो ऐसा लगता है कि समस्या फाइलों में कुछ भ्रष्टाचार है। मुझे लगता है कि अगर मैं देख सकता हूं कि "फ़ाइल अपठनीय है" और केवल कैश साफ़ करें (Cache::forget(...)
), तो समस्या को हल करना चाहिए।
ऐसी त्रुटि को नोटिस करने का सबसे अच्छा तरीका क्या होगा? ऐसा लगता है कि फ़ाइल को पुनर्प्राप्त करने के सभी तर्क remember()
विधि के अंदर छिपा हुआ है। क्या मुझे बस इसे अनदेखा करना चाहिए और अन्य तरीकों का उपयोग करना चाहिए, कुछ निम्न की तरह?
if (!($postedItems = @Cache::get('home_posted_items'))
{
// prepare data
$postedItems = ['items' => $items, 'firstItemNumber' => $firstItem];
Cache::put('home_posted_items', $postedItems, $this->cacheTimes['postedItems']);
}
मेरे पास पहले लार्वेल 4.2 के साथ एक समान समस्या थी, उस समय कैश की फ़ाइलों को हटाया जाता था और फिर कैशिंग कक्षा कैश पाने की कोशिश करेगी और विफल हो जाती है क्योंकि फ़ाइल पठनीय नहीं है (नहीं मौजूद है) और कैश की सफाई के बाद सबकुछ ठीक काम करता है। मैं जो कहना चाहता हूं वह यह है कि यदि आप याद रखने के बजाय कैश :: डालते हैं तो यह कुछ भी नहीं बदलेगा, एक बार ऐसा करने का एकमात्र तरीका कैश को अमान्य करना है जब आप जानते हैं कि यह होने वाला है –
आप डिस्क कोटा या आप शायद अंतरिक्ष से बाहर हो रहे हैं? या क्या कुछ अप्रत्याशित चार स्ट्रिंग में हैं जिन्हें आप बेअसर करने की कोशिश कर रहे हैं? इम्हो को आगे बढ़ाने का सबसे अच्छा तरीका FileStore.php की पंक्ति 78 पर सामग्री को VarDump करना है। आप जो पाएं, मुझे उसके बारे में बताएं। – DonCallisto
@ डॉन कैलिस्टो अंतरिक्ष में कोई समस्या नहीं है, मैं इससे बाहर नहीं जा रहा हूं। लेकिन ऐसा लगता है कि हालांकि फाइलें किसी कारण से कट जाती हैं। मैंने एक अपवाद पकड़ा और इसे लॉग फ़ाइल में लिखा - यह पता चला कि यह अंत में कट गया था।यह अजीब बात है क्योंकि यह कभी-कभी होता है और ऐसा लगता है कि कोई संसाधन सीमाएं नहीं पहुंचती हैं। –