عند محاولة بدء discourse، لا يمكنني الوصول إليه من متصفحي. وجدت بعض المعلومات في ملفات السجل قد تكون سبب هذه المشكلة. هل يعرف أحد ما هي المشكلة؟
# /var/discourse/standalone/log/rails/unicorn.stderr.log
فشل في الإبلاغ عن الخطأ: خطأ في الاتصال بـ Redis على localhost:6379 (Errno::EADDRNOTAVAIL) 2 خطأ في الاتصال بـ Redis على localhost:6379 (Errno::EADDRNOTAVAIL) فشل الاشتراك، إعادة الاتصال خلال ثانية واحدة. مكدس الاستدعاء ["/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:362:in `rescue in establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:343:in `establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:106:in `block in connect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:306:in `with_reconnect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:105:in `connect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:381:in `ensure_connected'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:231:in `block in process'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:319:in `logging'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:230:in `process'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:139:in `block in call_loop'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:292:in `with_socket_timeout'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/client.rb:138:in `call_loop'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/subscribe.rb:43:in `subscription'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/subscribe.rb:12:in `subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis.rb:3467:in `_subscription'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis.rb:2300:in `block in subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis.rb:52:in `block in synchronize'", "/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis.rb:52:in `synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis.rb:2299:in `subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus/backends/redis.rb:287:in `global_subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus.rb:721:in `global_subscribe_thread'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus.rb:669:in `block in new_subscriber_thread'"]
فشل في الإبلاغ عن الخطأ: خطأ في الاتصال بـ Redis على localhost:6379 (Errno::EADDRNOTAVAIL) 3 استثناء المهمة: خطأ في الاتصال بـ Redis على localhost:6379 (Errno::EADDRNOTAVAIL)
# /shared/standalone/log/var-log/redis/current
40:M 11 Dec 2019 17:46:24.868 # تحذير: لا يمكن تطبيق إعداد TCP backlog بقيمة 511 لأن /proc/sys/net/core/somaxconn مضبوط على القيمة الأقل وهي 128.
40:M 11 Dec 2019 17:46:24.868 # تم تهيئة الخادم
40:M 11 Dec 2019 17:46:24.868 # تحذير: تم تعيين overcommit_memory إلى 0! قد يفشل الحفظ في الخلفية في حالة انخفاض الذاكرة. لحل هذه المشكلة، أضف 'vm.overcommit_memory = 1' إلى /etc/sysctl.conf ثم أعد تشغيل النظام أو شغّل الأمر 'sysctl vm.overcommit_memory=1' لتطبيق التغيير.
40:M 11 Dec 2019 17:46:24.868 # تحذير: لديك دعم Transparent Huge Pages (THP) مفعّل في نواتك. هذا سيسبب مشاكل في زمن الاستجابة واستهلاك الذاكرة مع Redis. لحل هذه المشكلة، شغّل الأمر 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' بصلاحيات root، وأضفه إلى /etc/rc.local للحفاظ على الإعداد بعد إعادة التشغيل. يجب إعادة تشغيل Redis بعد تعطيل THP.
40:M 11 Dec 2019 17:46:24.885 * تم تحميل قاعدة البيانات من القرص خلال 0.017 ثانية
40:M 11 Dec 2019 17:46:24.891 * جاهز لقبول الاتصالات
تم ترقية Docker بنجاح باستخدام apt upgrade docker (لم تكن النسخة الأحدث)، ثم أُعيد تشغيل الخادم عبر reboot، وأُعيد بناء التطبيق باستخدام ./launcher rebuild app (ظهرت بعض تحذيرات Redis أثناء إعادة البناء، لكنها مطابقة تقريبًا لتلك الموجودة في ملف var-log/redis/current)، ومع ذلك لا يزال من المستحيل الوصول إلى موقعي. حاولت الوصول إليه عبر Apache2 كوكيل (ProxyPass) مما أدى إلى ظهور خطأ 503، وعبر عنوان IP ومنفذ HTTP (لقد قمت بتعطيل HTTPS) مما أدى فقط إلى ظهور رسالة “ERR_CONNECTION_REFUSED” من المتصفح.
في هذه المرة، يُظهر ملف unicorn.stderr.log فقط ما يلي:
I, [2019-12-12T11:58:37.378657 #70] INFO -- : Refreshing Gem list
I, [2019-12-12T11:58:56.751681 #70] INFO -- : listening on addr=127.0.0.1:3000 fd=9
I, [2019-12-12T11:59:04.682642 #70] INFO -- : master process ready
I, [2019-12-12T11:59:23.890076 #172] INFO -- : worker=0 ready
I, [2019-12-12T11:59:24.852000 #179] INFO -- : worker=1 ready
ويستمر ملف Redis الحالي في عرض التحذيرات كما كان من قبل.
ولا زلت لم أجد طريقة لإصلاح هذه المشكلة حتى الآن. كما أنني تحدثت مع بعض مشرفي المنتدى الذين يستخدمون Discourse، ولم يبدو أن أيًا منهم واجه هذه المشكلة من قبل.
بدء تشغيل 5 عمليات جانبية (sidekiqs) خاضعة للإشراف
تحميل Sidekiq في معرف العملية 4160
2020-01-25T19:29:16.281Z pid=4160 tid=orb7qpo9c ERROR: خطأ في جلب المهمة: خطأ في الاتصال بـ Redis على localhost:6379 (Errno::EADDRNOTAVAIL)
2020-01-25T19:29:16.288Z pid=4160 tid=orb7qpoj0 ERROR: خطأ في جلب المهمة: خطأ في الاتصال بـ Redis على localhost:6379 (Errno::EADDRNOTAVAIL)
2020-01-25T19:29:16.287Z pid=4160 tid=orb7rr8k4 ERROR: خطأ في جلب المهمة: خطأ في الاتصال بـ Redis على localhost:6379 (Errno::EADDRNOTAVAIL)
2020-01-25T19:29:16.283Z pid=4160 tid=orb7qpop4 ERROR: خطأ في جلب المهمة: خطأ في الاتصال بـ Redis على localhost:6379 (Errno::EADDRNOTAVAIL)
هذه تثبيت جديد تمامًا لـ Discourse، حاوية مستقلة مع اتصال عبر منفذ Unix (unix socket) إلى nginx الخارجي. أحاول تضمين Discourse في موقع Ghost للتعليقات، والأخطاء مرتبطة بعرض منشور يحتوي على تضمين Discourse (ويحاول Discourse طابور مهمة لتحليل الصفحة المرجعية؟). كان لدي إعداد مشابه يعمل لمدة عام، لكنه تعطل عند محاولة الترقية، لذا أعيد التكوين بناءً على ذاكرة (غير دقيقة). هناك الكثير من المجال لحدوث أخطاء من قبلي…
يبدو أن Redis نفسه يعمل بشكل جيد (من standalone/log/var-log/redis/current) current.txt (37.0 KB)
ويبدو أنه يتعامل مع بعض الاتصالات على المنفذ المتوقع :6379. وبعض هذه الاتصالات قادمة من unicorn-worker، علماً بذلك.
أواجه نفس الخطأ في تثبيت جديد لـ Discourse عبر Docker. كان يعمل بشكل جيد، ثم قمت بإيقافه لإعداد PostgreSQL 12 وتمكين صفحة خطأ ثابتة للصيانة. الآن، لا يمكنني تشغيل Discourse مرة أخرى.
يبدو أن هناك مشكلة في اتصال Rails بـ Redis. من ملف production.log:
Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second. Call stack ["/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:363:in `rescue in establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:344:in `establish_connection'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:106:in `block in connect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:307:in `with_reconnect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:105:in `connect'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:382:in `ensure_connected'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:231:in `block in process'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:320:in `logging'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:230:in `process'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis/client.rb:125:in `call'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:915:in `block in get'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:51:in `block in synchronize'", "/usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:51:in `synchronize'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.4/lib/redis.rb:914:in `get'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus/backends/redis.rb:360:in `process_global_backlog'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus/backends/redis.rb:271:in `block in global_subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus/backends/redis.rb:284:in `global_subscribe'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus.rb:741:in `global_subscribe_thread'", "/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-3.2.0/lib/message_bus.rb:689:in `block in new_subscriber_thread'"]
Creating scope :open. Overwriting existing method Poll.open.
Creating scope :open. Overwriting existing method Poll.open.
Creating scope :open. Overwriting existing method Poll.open.
ملف production_errors.log فارغ. يبدو أن Redis يبدأ بشكل طبيعي. تجدر الإشارة إلى أن سجل النظام (syslog) يحتوي على هذه الأسطر:
May 17 13:35:30 wobbly-wiki-forum-app rsyslogd: imklog: cannot open kernel log (/proc/kmsg): Operation not permitted.
May 17 13:35:30 wobbly-wiki-forum-app rsyslogd: activation of module imklog failed [v8.1901.0 try https://www.rsyslog.com/e/2145 ]
May 17 13:35:30 wobbly-wiki-forum-app rsyslogd: [origin software="rsyslogd" swVersion="8.1901.0" x-pid="51" x-info="https://www.rsyslog.com"] start
أتساءل عما إذا كانت تشير إلى مشكلة؟ على أي حال، هناك ذاكرة ومساحة قرص كافية على الخادم.
تحرير: تم الحل الآن! كنت أستخدم وكيل عكسي nginx، لكنني لم أتبع التعليمات حرفيًا. لقد نسيت إضافة القالب "templates/web.socketed.template.yml"، وقمت أيضًا بإلغاء تفعيل قسم expose: بالكامل في ملف app.yml. الآن يعمل.
هل توصل أي شخص آخر إلى حل لهذا؟ أواجه هذه المشكلة في تثبيت Docker أساسي على Ubuntu Server 20.04. أنا لا أقوم بتشغيل أي شيء من خلال وكيل عكسي Nginx. لقد استخدمت للتو البرنامج النصي الافتراضي لتثبيت Docker.