لقد حاولت للتو الترقية من 3.0.1 إلى 3.0.2، وحصلت على هذا الخطأ أثناء مرحلة rake db:migrate:
rake aborted!
NameError: undefined method `call' for class `Redis::Client'
Did you mean? caller
/var/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/mini_profiler/profiling_methods.rb:83:in `alias_method'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/mini_profiler/profiling_methods.rb:83:in `profile_method'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/rack-mini-profiler-3.0.0/lib/mini_profiler/profiling_methods.rb:65:in `counter_method'
/var/discourse/config/initializers/006-mini_profiler.rb:90:in `<main>'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:667:in `load'
باختصار شديد، وجدت أن تثبيت إصدار redis عند 4.8.0 بدلاً من ترك إصدار redis غير محدد في Gemfile قد حل المشكلة. أي، بالنسبة لـ Gemfile:
-gem "redis"
+gem "redis", "4.8.0"
لا أشعر بالراحة الشديدة في العبث بهذا، ولكن يبدو لي أن هذا تأثير جانبي غير مقصود لترقية redis في مكان آخر منذ آخر ترقية لي (إلى 3.0.1)، وأن إعادة تثبيت Discourse 3.0.1 ستظهر الآن نفس المشكلة.
آمل أن يساعد هذا شخصًا ما، ويرجى إخباري إذا كان هذا يترك نظامي في حالة ضعيفة
بالتأكيد! غريب، لأنني لم أسمع من قبل عن Gemfile أو Gemfile.lock. ولكن بعد أن كان لدي 20 منتدى آخر لتكرار التثبيت عليها (تنهد)، اتضح أن كل شيء بدأ بمشكلة مختلفة أثناء التثبيت حيث انتهت الشكاوى بتوصية بمحاولة حذف Gemfile.lock:
وجد Bundler متطلبات متعارضة لإصدار Ruby:
في Gemfile:
actionmailer (= 7.0.4.3) تم حله إلى 7.0.4.3، والذي يعتمد على
Ruby (>= 2.7.0)
تم حل sassc-rails إلى 2.1.2، والذي يعتمد على
تم حل sprockets-rails إلى 3.4.2، والذي يعتمد على
Ruby (>= 2.5)
تم حل json إلى 2.6.3، والذي يعتمد على
Ruby (>= 2.3)
:
:
:
تم حل json_schemer إلى 0.2.23، والذي يعتمد على
تم حل ecma-re-validator (~> 0.3) إلى 0.4.0، والذي يعتمد على
Ruby (>= 2.6، < 4.0)
تم حل rspec إلى 3.12.0، والذي يعتمد على
تم حل rspec-expectations (~> 3.12.0) إلى 3.12.2، والذي يعتمد على
تم حل diff-lcs (>= 1.2.0، < 2.0) إلى 1.5.0، والذي يعتمد على
Ruby (>= 1.8)
تم حل web-push إلى 3.0.0، والذي يعتمد على
Ruby (>= 3.0)
إصدار Ruby الحالي:
Ruby (= 2.7.6)
لم يتمكن Bundler من العثور على إصدارات متوافقة لـ gem "hkdf":
في اللقطة (Gemfile.lock):
hkdf (= 1.0.0)
في Gemfile:
تم حل web-push إلى 1.0.0، والذي يعتمد على
hkdf (~> 0.2)
سيؤدي حذف ملف Gemfile.lock وتشغيل `bundle install` إلى إعادة بناء
اللقطة الخاصة بك من الصفر، باستخدام
ملفات gem الموجودة في Gemfile فقط، مما قد يحل التعارض.
لذلك، تجاوزت هذا الخطأ الأولي بعد إزالة ملف القفل كما هو مقترح، ثم واجهت الخطأ NameError: undefined method ‘call’ الذي تم وصفه سابقًا. قمت بإصلاحه عن طريق تثبيت إصدار redis. ثم، كل شيء عمل.
لذلك، تم تعديل برنامجي النصي لـ أ) إزالة Gemfile.lock (بسبب الخطأ المذكور أعلاه) و ب) تغيير Gemfile تلقائيًا لتثبيت redis عند 4.8.0. كل شيء على ما يرام… اعتقدت. نجح هذا على ثلاثة من أصل 20 جهازًا “متطابقًا”! أعطت البقية هذا الخطأ الجديد:
[discourse@in3020-discourse discourse]$ cd $INSTA; RAILS_ENV=production /usr/local/bin/bundle exec rake db:migrate # stuffing a lot of stuff into the database
rake aborted!
NoMethodError: undefined method `logger=' for Sidekiq:Module
Did you mean? logger
/var/discourse/config/initializers/100-sidekiq.rb:58:in `<main>'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:667:in `load'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:667:in `block in load_config_initializer'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.4.3/lib/active_support/notifications.rb:208:in `instrument'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:666:in `load_config_initializer'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:620:in `block (2 levels) in <class:Engine>'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:619:in `each'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/engine.rb:619:in `block in <class:Engine>'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:32:in `instance_exec'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:32:in `run'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:61:in `block in run_initializers'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:50:in `each'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:50:in `tsort_each_child'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/initializable.rb:60:in `run_initializers'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/application.rb:372:in `initialize!'
/var/discourse/config/environment.rb:7:in `<main>'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.6.7/lib/zeitwerk/kernel.rb:38:in `require'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/application.rb:348:in `require_environment!'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/railties-7.0.4.3/lib/rails/application.rb:511:in `block in run_tasks_blocks'
/var/discourse/vendor/bundle/ruby/2.7.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/cli.rb:486:in `exec'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/cli.rb:31:in `dispatch'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/cli.rb:25:in `start'
/usr/local/share/gems/gems/bundler-2.3.26/exe/bundle:48:in `block in <top (required)>'
/usr/local/share/gems/gems/bundler-2.3.26/lib/bundler/friendly_errors.rb:120:in `with_friendly_errors'
/usr/local/share/gems/gems/bundler-2.3.26/exe/bundle:36:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tasks: TOP => db:migrate => db:load_config => environment
(See full trace by running task with --trace)
وهو أمر غريب حقًا لأن ملفات /var/discourse/config/initializers/100-sidekiq.rb كانت متطابقة على جميع الأجهزة، وبالتأكيد لم تحتوي على ‘logger=’، بل عبارة ‘logger = …’.
أخيرًا اكتشفت أنه على الأجهزة التي عملت فيها، كان إصدار /usr/local/bin/bundle هو 2.3.20، وليس 2.3.26 كما في الأجهزة التي فشلت. لذا، بشكل عام، إضافة هذا قبل أمر التثبيت لـ discourse قام بالحل بالنسبة لي (لم يكن كافيًا إجراء تثبيت bundler عند 2.3.20 بعد تثبيت bundler لـ discourse، كان يجب أن يكون قبل ذلك):
Ruby 2.7 هو نهاية الدعم (EOL) ولا يتم دعمه من قبلنا بعد الآن. لا تحصل على هذا الإصدار عند تثبيت Discourse باتباع دليل التثبيت القياسي لفترة من الوقت، لذا أفترض أن هذا تثبيت مخصص؟
أوصي بالالتزام بدليل التثبيت الرسمي المدعوم حتى للأشخاص المطلعين على مكدس Discourse، وهذا أكثر أهمية للأشخاص غير المطلعين على التقنيات المستخدمة.
نعم، القيام بذلك بالطريقة الرسمية كان سيمنحني بالتأكيد صداعًا أقل (على الأرجح لا شيء). المشكلة هي أنني لست مسموحًا لي باستخدام صور دوكر التي لم تتم الموافقة عليها مسبقًا من قبل قسم أمن تكنولوجيا المعلومات لدينا - وصورتك ليست كذلك.
لذلك، هذا بالفعل تثبيت أصلي مخصص على أجهزة RHEL8، والذي احتاج أيضًا إلى بعض الحيل مع SELinux ليعمل.
ربما هناك آخرون لديهم نفس المشكلة - ربما سيكون من المفيد لهم إذا نشرت موضوعًا حول إجراء التثبيت الخاص بي؟ لا تتردد في الاحتجاج - يمكنني أن أرى أن هذا يمكن اعتباره “تشجيعًا” للتثبيت بهذه الطريقة حتى لو لم يكن ضروريًا تمامًا، مما قد يؤدي إلى المزيد من الأسئلة لك.
على الهامش، عند البحث عن حلول لأي مشكلة في SELinux، فإن النصيحة الأكثر تكرارًا التي ستجدها هي “هذه هي طريقة تعطيله”: ضاحكًا. ولكن هذا ليس خيارًا هنا.
شكراً على السياق. يرجى العلم أننا لا نقدم دعماً مجانياً للتثبيتات المخصصة هنا.
يستخدم هذا التثبيت بالفعل إصداراً من Ruby لا يعمل مع أي من الإصدارات الحالية لـ Discourse، ولا يحترم أيًا من إصدارات الجواهر التي تمت إدارتها بعناية، ولا يستخدم جميع المكتبات المشتركة على مستوى نظام التشغيل التي نديرها يدوياً. لذلك، فإن حدوث خلل ليس مسألة “إذا” بل مسألة “متى”.
قد تقترح على فريق الأمان الخاص بك أن الصورة التي تم فحصها واستخدامها من قبل المطورين أكثر أمانًا بكثير، بكثير من محاولتك لتطبيق تصحيحات الأمان على أشياء لا يمكنك تتبعها إلا إذا كانت وظيفتك الوحيدة.
هاها، نعم (من المحتمل أن يكون أكثر أمانًا مع صورك) ولا (غير مفيد - ولكن شكرًا على تعليقك على أي حال😊).
هذا ليس عملي اليومي بالفعل، أنا فقط أدير هذه المنتديات “لأنني الشخص الذي يمكنه فعل ذلك” كبرنامج تجريبي حتى نتمكن من إقناع قسم تكنولوجيا المعلومات لدينا بتولي الأمر وتشغيله لجامعة أوسلو بأكملها.
لحسن الحظ، يبدو أن ذلك قد نجح، لذا آمل أن يكون هذا هو الفصل الدراسي الأخير الذي أدير فيه العرض. أراهن أن قسم تكنولوجيا المعلومات سيستخدم الصور…
وشكرًا لك، @Falco، على الإشارة إلى وجود عدم تطابق في إصدار Ruby، سألقي نظرة عليه إذا/عندما أواجه مشاكل مع التحديثات المستقبلية.
@pfaffman هاها، نعم. لم نخرج تمامًا من المأزق بعد، حتى لو قالت تقنية المعلومات “حسنًا”: يجب أن تتم الموافقة عليه في القمة (من قبل مجلس الجامعة) كقناة اتصال رسمية أولاً. لحسن الحظ، حصلنا على قسم العلوم الطبيعية معنا بشكل كبير، وقد دفعوا به عبر العقبات.
أنا فخور جدًا بقدرتي على تشغيل هذه النسخ التجريبية - لن يتمكن الكثير من الأشخاص خارج قسم تقنية المعلومات من القيام بذلك (ضمن سياسات الأمان اللازمة، هذا هو). يشير الأشخاص في قسم العلوم الطبيعية باستمرار إليه باسم “Astro-Discourse” (أنا في معهد الفيزياء الفلكية النظرية):ضحك:.
ولكن الآن… يبدو أن عليّ إدارة هذا الأمر لفصل دراسي واحد آخر، بنفس الإعداد غير القياسي. أتساءل، ما هي إصدارات pgsql التي يتوافق معها إصدار Discourse الحالي؟