لقد واجهت مؤخرًا مشكلة مشابهة لمشكلة @Sonosus، ووجدت أنها ناتجة عن أحدث إصدار من Ubuntu (20.04) الذي يأتي مثبتًا مسبقًا مع OpenSSL 3.0.2. قد يكون هذا الوضع موجودًا أيضًا مع إصدارات أخرى من Ubuntu/Debian التي تأتي مثبتة مسبقًا مع OpenSSL. إذا كنت تواجه هذه المشكلة، فمن المحتمل أن ترغب في تجميع إصدار سابق من OpenSSL من المصدر (استخدمت OpenSSL-1.1.1n)، ثم إعادة تشغيل الأمر bundle install. في الأساس، رسالة الخطأ هذه تتعلق بـ OpenSSL >= 1.0.1، < 3.0.0، واتضح أن 1.1 هو البديل الوحيد.
ستحتاج أيضًا إلى التحقق من إصدار Ruby الذي تستخدمه باستخدام ruby --version. لا يزال Discourse يستخدم Ruby 2، لذلك إذا كنت تستخدم Ruby 3.x أو أحدث، فستحتاج إلى استخدام إصدار سابق. اعتمادًا على كيفية تثبيت Ruby، من المحتمل أن تواجه مشكلة OpenSSL مماثلة عند تثبيت إصدار سابق، لذلك أوصي باستخدام مدير إصدارات لـ Ruby هنا، وقد وجدت أن Ruby 2.7.6 هو أفضل إصدار حاليًا للاستخدام مع Discourse.
بعد تثبيت نسخة جديدة من Ubuntu 20.04، إليك ما فعلته لجعل bundle install يعمل بشكل صحيح:
تثبيت تبعيات Discourse، asdf، واستنساخ Discourse
<(wget -qO- https://raw.githubusercontent.com/discourse/install-rails/master/linux)
sudo apt install build-essential checkinstall zlib1g-dev
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.0
git clone https://github.com/discourse/discourse.git ~/discourse
إعداد قاعدة البيانات
قم بإنشاء دور بنفس اسم مستخدم نظام Ubuntu الخاص بك:
sudo -u postgres createuser -s "$USER"
تثبيت OpenSSL-1.1.1n من المصدر
wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz
tar -zxf openssl-1.1.1n.tar.gz && cd openssl-1.1.1n
./config --prefix=/opt/openssl-1.1.1n --openssldir=/opt/openssl-1.1.1n shared zlib
make
make test
make install
sudo rm -rf /opt/openssl-1.1.1n/certs
sudo ln -s /etc/ssl/certs /opt/openssl-1.1.1n
ثم أضفت السطر التالي إلى ملف .bashrc الخاص بي
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=/opt/openssl-1.1.1n/"
بينما نحن هنا، أضفت أيضًا الأسطر التالية لـ asdf
. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash
احفظ واخرج، ثم
source ~/.bashrc
تثبيت Ruby 2.7.6
asdf plugin add ruby
asdf install ruby 2.7.6
قد تكون جاهزًا لتشغيل bundle install الآن، ومع ذلك، واجهت مشكلتين أخريين أثناء عملية تثبيت Discourse سأذكرهما هنا كمرجع في حال واجههما أي شخص آخر.
حدث خطأ أثناء تثبيت mini_racer
أثناء تشغيل bundle install كنت أواجه باستمرار بعد تثبيت OpenSSL-1.1.1n و Ruby 2.7.6
حدث خطأ أثناء تثبيت mini_racer (0.6.1)، ولا يمكن لـ Bundler المتابعة.
والتي يمكن حلها عن طريق تعديل السطر التالي في نسختك المحلية من discourse/Gemfile:
واستبداله بـ
gem 'mini_racer', github: 'rubyjs/mini_racer', branch: 'refs/pull/186/head'
بعد هذه الخطوة تمكنت من تشغيل bundle install بنجاح.
هذا مشابه لمشكلة تحدث على MacOS يمكنك قراءتها أكثر هنا
لا يوجد مثل هذا الملف أو الدليل - convert
في الخطوات اللاحقة لتثبيت Discourse، واجهت أيضًا المشكلة التالية عند تشغيل bundle exec rake autospec
فشل:
1. AboutController.index يجب أن يعرض صفحة المعلومات للمستخدم المسجل دخوله عندما يكون login_required صحيحًا
فشل/خطأ: expect(response.status).to eq(200)
متوقع: 200
حصلت على: 500
(تمت المقارنة باستخدام ==)
#./spec/requests/about_controller_spec.rb:27:in 'block (3 levels) in <main>'
#./spec/rails_helper.rb:277:in 'block (2 levels) in <top (required)>'
#---------------------
#---سببه:---
# Errno::ENOENT
# لا يوجد مثل هذا الملف أو الدليل - convert
# ./lib/letter_avatar.rb:105:in ``'
هذا الخطأ يعني أن حزمة ImageMagick غير مثبتة (فهي توفر الثنائي convert)
يفترض أن هذا النص البرمجي في بداية عملية تثبيت Discourse يجب أن يحتوي على جميع الحزم الضرورية، ولكن يبدو أن هذه الحزمة قد تم استبعادها.
أخيرًا، بعد تثبيت ImageMagick باستخدام sudo apt install imagemagick تمكنت من تشغيل خادم Discourse بنجاح!
آمل أن تكون هذه المعلومات مفيدة لأي شخص يمر بهذه العملية ويواجه بعض المشاكل. ![]()