खोज और डिबगिंग के बाद, इसने इसे काम किया:
'redis' => [
'client' => 'predis',
'cluster' => true,
'options' => [
'cluster' => 'redis',
'parameters' => [
'host' => env('REDIS_DEFAULT_HOST', '127.0.01'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_DEFAULT_PORT', 6379),
'database' => 0,
],
],
'clusters' => [
'default' => [
'host' => env('REDIS_DEFAULT_HOST', '127.0.01'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_DEFAULT_PORT', 6379),
'database' => 0,
],
'jobs' => [
'host' => env('REDIS_JOBS_HOST', '127.0.01'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_JOBS_PORT', 6379),
'database' => 0,
],
'content' => [
'host' => env('REDIS_CONTENT_HOST', '127.0.01'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_CONTENT_PORT', 6379),
'database' => 0,
],
'options' => [
'cluster' => 'redis'
],
]
]
नोट:उपरोक्त प्रश्न में मेरी कॉन्फ़िगरेशन में एक स्पष्ट गलती यह थी कि मैंने होस्ट और पोर्ट को जोड़ दिया, जिसे मैंने यहां तय किया था। मेरी .env फ़ाइल इस तरह दिखती है:
REDIS_DEFAULT_HOST=127.0.0.1
REDIS_JOBS_HOST=127.0.0.1
REDIS_CONTENT_HOST=127.0.0.1
REDIS_DEFAULT_PORT=7000
REDIS_JOBS_PORT=7001
REDIS_CONTENT_PORT=7002
नोट:मैंने यहां दिए गए निर्देशों का उपयोग करके क्लस्टर बनाया है:https://redis.io/topics/cluster-tutorial#creating-the-cluster
अनुसंधान पद्धति
इस तथ्य के कारण:1. इस पर लार्वा/प्रीडिस प्रलेखन की कमी है2. स्टैक ओवरफ्लो पर अधिकांश उत्तर इन पंक्तियों के साथ हैं:गूगलिंग और खोज के बाद .. मेरे लिए यही काम आया क्या हो रहा है, इसकी अधिक व्याख्या किए बिना
मुझे लगा कि कैसे . दिखाकर मैं कुछ मदद कर सकता हूं मुझे उपरोक्त के लिए अपना उत्तर मिल गया।
1) त्रुटि समस्या का समाधान
इस बग को हल करने के लिए
<ब्लॉकक्वॉट>local.ERROR:Symfony\Component\Debug\Exception\FatalThrowableError:Type error:Argument 1 to पारित Predis\Connection\Parameters::__construct() प्रकार की सरणी, पूर्णांक दिया जाना चाहिए, जिसे/उपयोगकर्ता/साझा/देव/php कहा जाता है /toters-api/vendor/predis/predis/src/Connection/Factory.phpon लाइन 164 in/Users/Shared/dev/php/toters-api/vendor/predis/predis/src/Connection/Parameters.php:34Stack ट्रेस :
मुझे एहसास हुआ कि मेरा config/database.php प्रारूप बस गलत था। हर जगह गुगलिंग ने मुझे कोई स्पष्ट तस्वीर नहीं दी, इसलिए मैंने xdebug का उपयोग करने और कोड में गोता लगाने का फैसला किया। नोट:मेरे पास एक दस्तावेज़ में मुद्रित त्रुटि स्टैक ट्रेस (उपरोक्त प्रश्न में दिखाया गया) था, और मैंने इसे डिबग चरणों के माध्यम से मार्गदर्शन करने के लिए एक पक्षी की आंखों के दृश्य के रूप में उपयोग किया था (यानी हमेशा आउटपुट प्रिंट करते समय/बाहर/बाहर कदम उठाना आदि) एक अलग दस्तावेज़ में और इसे मेरे config/database.php के साथ एक सैनिटी चेक/डीबग कंपास के रूप में तुलना करना)।
खुदाई और छपाई के बाद, मुझे यह पता चला:
[ *Locals ] [ Superglobals ] [ User defined constants ]
- Locals at /Users/Shared/dev/php/toters-api/vendor/predis/predis/src/Client.php:55
▾ $options = (array [1])
\
⬦ $options["cluster"] = (string [5]) `redis`
/
▾ $parameters = (array [4])
\
⬦ $parameters[0] = (string [14]) `127.0.0.1:7000`
|
⬦ $parameters[1] = (null)
|
⬦ $parameters[2] = (int) 6379
|
⬦ $parameters[3] = (int) 0
/
▾ $this = (Predis\Client [3])
\
⬦ $this->connection = (null)
|
⬦ $this->options = (null)
|
⬦ $this->profile = (null)
/
मैंने इसकी तुलना अपनी .env फ़ाइल की सामग्री से की:
REDIS_DEFAULT_HOST=127.0.0.1:7000
REDIS_JOBS_HOST=127.0.0.1:7001
REDIS_CONTENT_HOST=127.0.0.1:7002
और मुझे एहसास हुआ कि प्रारूप गलत था, मुझे होस्ट और पोर्ट को एक ही env वेरिएबल में नहीं रखना चाहिए.. इसलिए मैंने इसे इसके बजाय इस तरह रखा:
REDIS_DEFAULT_HOST=127.0.0.1
REDIS_JOBS_HOST=127.0.0.1
REDIS_CONTENT_HOST=127.0.0.1
REDIS_DEFAULT_PORT=7000
REDIS_JOBS_PORT=7001
REDIS_CONTENT_PORT=7002
और इससे मेरी पहली समस्या हल हो गई।
2) अन्य समस्याओं का समाधान
उपरोक्त तय होने के बाद मुझे यह मिल गया
<ब्लॉकक्वॉट>क्लस्टरडाउन हैश स्लॉट प्रस्तुत नहीं किया गया
यह काफी आसान था, यह त्रुटि संदेश को गुगल करने का मामला था (चूंकि त्रुटि संदेश स्पष्ट रूप से मूल रेडिस त्रुटि संदेश था, बजाय कुछ गुप्त लाइब्रेरी रैपर जैसे प्रीडिस त्रुटि संदेश) .. और मुझे यह उत्तर मिला।
बाकी आसान था।