أولاً وقبل كل شيء، أنا جديد تمامًا في تطوير إضافات Ruby on Rails و Discourse، لذا إذا كان هناك اتجاه أفضل، فسأكون ممتنًا لذلك.
نظرة عامة
لدي نسخة معدلة داخلية من Discourse (discourse-ldap-auth) أقوم بإحضارها عبر استنساخ git. تتطلب هذه النسخة المعدلة من المكون الإضافي نسخة معدلة من Gem (omniauth-ldap) أقوم بإحضارها عبر Gemfile عن طريق إلحاق عبارة gem بعنوان URL داخلي لـ git في خطاف after_bundle_exec الخاص بالتطبيق. يفشل التطبيق في البدء أثناء إعادة البناء لأنه لا يمكنه العثور على الـ gem، على الرغم من أن الـ gem يبدو أنه تم تثبيته بنجاح في وقت سابق في مخرجات إعادة البناء.
التفاصيل
لدينا نسخة Discourse داخلية قيد التشغيل لفترة طويلة حيث كان يُطلب من المستخدمين التسجيل باستخدام بريدهم الإلكتروني الخاص بالشركة. أضفنا مؤخرًا المكون الإضافي discourse-ldap-auth لاستخدام نفس تسجيل الدخول مثل مواقع الإنترانت الأخرى. يعمل هذا التكوين، ولكن المطالبات للمستخدمين مربكة. تتطلب معظم مواقع الإنترانت الأخرى اسم مستخدم، ولكن نسخة Discourse الخاصة بنا تتطلب عنوان بريد إلكتروني لربطه بأي حسابات موجودة. أود تغيير الحقول للمطالبة بعنوان بريد إلكتروني.
omniauth-ldap، الذي يبدو أنه مصدر نص النموذج، لا يدعم تخصيص الحقول مثل المكونات الإضافية الأخرى لـ Discourse. لقد قمت بتعديل هذا (و discourse-ldap-auth) داخليًا لإضافة استدعاءات إلى i18n.t على أمل أن أتمكن من تخصيص الحقول نظرًا لأنها خاصة بالمنطقة الآن. النسخة المعدلة تسمى omniauth-ldap-i18n. لقد أضفت هذا إلى app.yml الخاص بي للحصول على النسخة المعدلة من omniauth-ldap في Gemfile:
hooks:
after_bundle_exec:
- exec:
cd: $home
cmd:
- echo "gem 'omniauth-ldap-i18n', git:'https://internal-git-service/omniauth-ldap-i18n.git'" >> Gemfile
- su discourse -c 'bundle config unset deployment'
- su discourse -c 'bundle install --no-deployment --path vendor/bundle --jobs 4 --without test development'
داخل النسخة المعدلة من discourse-ldap-auth في plugin.rb:
gem 'omniauth-ldap-i18n', '1.0.0'
المخرجات عند إعادة بناء التطبيق:
Using omniauth-ldap-i18n 1.0.0 from https://internal-git-service/omniauth-ldap-i18n.git (at master@c3cb3ed)
Bundle complete! 127 Gemfile dependencies, 187 gems now installed.
Gems in the groups 'test' and 'development' were not installed.
Bundled gems are installed into './vendor/bundle'
مخرجات الخطأ قبل فشل البدء:
I, [2022-09-10T18:18:08.389538 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
ERROR: Could not find a valid gem 'omniauth-ldap-i18n' (= 1.0.0) in any repository
ERROR: Possible alternatives: omniauth-ldap-ifpe, omniauth-ldap, omniauth-ldap2, omniauth-aladin, omniauth-aliyun, omniauth-apihub, omniauth-learn, omniauth-lifen, omniauth-7digital, omniauth-aai
I, [2022-09-10T18:18:47.658658 #1] INFO -- : gem install pyu-ruby-sasl -v 0.0.3.3 -i /var/www/discourse/plugins/discourse-ldap-auth/gems/2.7.6 --no-document --ignore-dependencies --no-user-install
Successfully installed pyu-ruby-sasl-0.0.3.3
1 gem installed
gem install rubyntlm -v 0.6.3 -i /var/www/discourse/plugins/discourse-ldap-auth/gems/2.7.6 --no-document --ignore-dependencies --no-user-install
Successfully installed rubyntlm-0.6.3
1 gem installed
gem install net-ldap -v 0.17.1 -i /var/www/discourse/plugins/discourse-ldap-auth/gems/2.7.6 --no-document --ignore-dependencies --no-user-install
Successfully installed net-ldap-0.17.1
1 gem installed
gem install omniauth-ldap-i18n -v 1.0.0 -i /var/www/discourse/plugins/discourse-ldap-auth/gems/2.7.6 --no-document --ignore-dependencies --no-user-install
You are specifying the gem omniauth-ldap-i18n in /var/www/discourse/plugins/discourse-ldap-auth/plugin.rb, however it does not exist!
Looked for: /var/www/discourse/plugins/discourse-ldap-auth/gems/2.7.6/specifications/omniauth-ldap-i18n-1.0.0.gemspec