مرحباً،
أنا أقوم بإنشاء إضافة (plugin) وأحاول كتابة بعض الاختبارات، ولكن عند محاولة تشغيل مواصفات إضافة الاستبيان (poll plugin) عبر
bundle exec rake plugin:spec poll
كما هو موضح هنا ، أحصل على الخطأ التالي:
حدث خطأ أثناء تحميل ./plugins/poll/spec/integration/poll_endpoints_spec.rb.
فشل في التنفيذ: raise ArgumentError.new(“No setting named ‘#{name}’ exists”)
ArgumentError:
No setting named 'discourse_narrative_bot_enabled' exists
# ./lib/site_settings/defaults_provider.rb:58:in `set_regardless_of_locale'
# ./config/environments/test.rb:74:in `block (3 levels) in <main>'
# ./config/environments/test.rb:63:in `tap'
# ./config/environments/test.rb:63:in `block (2 levels) in <main>'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/activesupport-6.1.3.2/lib/active_support/lazy_load_hooks.rb:68:in `block in execute_hook'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/activesupport-6.1.3.2/lib/active_support/lazy_load_hooks.rb:61:in `with_execution_control'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/activesupport-6.1.3.2/lib/active_support/lazy_load_hooks.rb:66:in `execute_hook'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/activesupport-6.1.3.2/lib/active_support/lazy_load_hooks.rb:52:in `block in run_load_hooks'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/activesupport-6.1.3.2/lib/active_support/lazy_load_hooks.rb:51:in `each'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/activesupport-6.1.3.2/lib/active_support/lazy_load_hooks.rb:51:in `run_load_hooks'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/railties-6.1.3.2/lib/rails/application/finisher.rb:140:in `block in <module:Finisher>'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/railties-6.1.3.2/lib/rails/initializable.rb:32:in `instance_exec'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/railties-6.1.3.2/lib/rails/initializable.rb:32:in `run'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/railties-6.1.3.2/lib/rails/initializable.rb:61:in `block in run_initializers'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/railties-6.1.3.2/lib/rails/initializable.rb:60:in `run_initializers'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/railties-6.1.3.2/lib/rails/application.rb:384:in `initialize!'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/railties-6.1.3.2/lib/rails/railtie.rb:207:in `public_send'
# /Users/myUser/.rvm/gems/ruby-2.7.0/gems/railties-6.1.3.2/lib/rails/railtie.rb:207:in `method_missing'
# ./config/environment.rb:7:in `<top (required)>'
# ./spec/rails_helper.rb:56:in `require'
# ./spec/rails_helper.rb:56:in `<top (required)>'
# ./plugins/poll/spec/integration/poll_endpoints_spec.rb:3:in `require'
# ./plugins/poll/spec/integration/poll_endpoints_spec.rb:3:in `<top (required)>'
ما الخطأ الذي أقوم به عند محاولة تشغيل اختبارات إضافة الاستبيان؟ ولماذا لا يتم تحميل هذا الإعداد المحدد إلى اللغة الافتراضية؟
شكراً لك.
cvx
(Jarek Radosz)
9 أغسطس 2021، 4:03م
2
لتشغيل اختبارات الاستطلاع فقط، استخدم الأمر: bundle exec rake "plugin:spec[poll]" (أو بشكل أقصر: bin/rake "plugin:spec[poll]")؛ وإلا فستقوم بتشغيل جميع اختبارات الإضافات.
بشأن الخطأ الذي تواجهه، لست متأكدًا. هل تم ترحيل قاعدة بيانات الاختبار؟ (bin/rails db:migrate RAILS_ENV=test)
إعجابَين (2)
شكرًا لك. كما قلت، لقد تم تنفيذ جميع مواصفات الإضافات، وقد تجاوزت هذه المشكلة بإزالة الإضافات الأخرى. كنت أسترشد بـ هذا ، لكن اتضح أن الأقواس كانت في المكان الخاطئ.
نعم، تم ترحيل قاعدة البيانات في بيئة الاختبار. تجاوزت هذه الخطأ عن طريق التعليق على السطر raise ArgumentError.new("No setting named '#{name}' exists") واستبداله بـ puts، وأظهر أن discourse_narrative_bot_enabled فقط هو ما يسبب هذا الخطأ؛ فجميع الإعدادات الأخرى سليمة. لا أعتقد أننا قمنا بأي شيء مع هذا الإعداد. على أي حال، بما أن مواصفاتاتي تعمل بشكل صحيح مع تجاهل هذا الخطأ، يمكنني ترك الحل المؤقت في discourse المحلي الخاص بي. وعندما أكتشف ما الذي تسبب في ذلك فعليًا، سأقوم بتحديث هذا المنشور.
إعجاب واحد (1)
أواجه حاليًا هذا الخطأ بالضبط في CI عند محاولة تشغيل عمليات الترحيل على قاعدة البيانات:
Run bin/rake db:create
rake aborted!
ArgumentError: No setting named 'discourse_narrative_bot_enabled' exists
/home/runner/work/discourse-multilingual/discourse-multilingual/lib/site_settings/defaults_provider.rb:58:in `set_regardless_of_locale'
/home/runner/work/discourse-multilingual/discourse-multilingual/config/environments/test.rb:73:in `block (3 levels) in <main>'
/home/runner/work/discourse-multilingual/discourse-multilingual/config/environments/test.rb:63:in `tap'
/home/runner/work/discourse-multilingual/discourse-multilingual/config/environments/test.rb:63:in `block (2 levels) in <main>'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/lazy_load_hooks.rb:79:in `block in execute_hook'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/lazy_load_hooks.rb:72:in `with_execution_control'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/lazy_load_hooks.rb:77:in `execute_hook'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/lazy_load_hooks.rb:63:in `block in run_load_hooks'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/lazy_load_hooks.rb:62:in `each'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/lazy_load_hooks.rb:62:in `run_load_hooks'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/application/finisher.rb:87:in `block in <module:Finisher>'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/initializable.rb:32:in `instance_exec'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/initializable.rb:32:in `run'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/initializable.rb:61:in `block in run_initializers'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/initializable.rb:60:in `run_initializers'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/application.rb:372:in `initialize!'
/home/runner/work/discourse-multilingual/discourse-multilingual/config/environment.rb:7:in `<main>'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/zeitwerk-2.6.0/lib/zeitwerk/kernel.rb:35:in `require'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/application.rb:348:in `require_environment!'
/home/runner/work/discourse-multilingual/discourse-multilingual/vendor/bundle/ruby/2.7.0/gems/railties-7.0.3.1/lib/rails/application.rb:511:in `block in run_tasks_blocks'
Tasks: TOP => db:migrate => db:load_config => environment
(See full trace by running task with --trace)
Error: Process completed with exit code 1.
يبدو أنه ناتج عن هذا السطر في النواة:
SiteSetting.defaults.tap do |s|
s.set_regardless_of_locale(:s3_upload_bucket, 'bucket')
s.set_regardless_of_locale(:min_post_length, 5)
s.set_regardless_of_locale(:min_first_post_length, 5)
s.set_regardless_of_locale(:min_personal_message_post_length, 10)
s.set_regardless_of_locale(:download_remote_images_to_local, false)
s.set_regardless_of_locale(:unique_posts_mins, 0)
s.set_regardless_of_locale(:max_consecutive_replies, 0)
# disable plugins
if ENV['LOAD_PLUGINS'] == '1'
s.set_regardless_of_locale(:discourse_narrative_bot_enabled, false)
end
end
SiteSetting.refresh!
end
end
إعجاب واحد (1)
الفريق، هذا يقتلني.
نظام التكامل المستمر الخاص بنا يتعطل عند db:migrate بسبب هذا.
إنه نسخة طبق الأصل تقريبًا من نظام التكامل المستمر لمكون discourse-chat الإضافي ، ولكن مع إضافة جدول زمني للمهام المجدولة.
يعمل نظام التكامل المستمر الخاص بنا لطلبات السحب والالتزامات، ولكن في مهمة مجدولة يفشل هنا في كل مرة.
أنا قادر على إعادة إنتاج هذا في وحدة تحكم Rails بواسطة كتلة مشابهة:
[19] pry(main)> SiteSetting.defaults.tap do |s|
[19] pry(main)* s.set_regardless_of_locale(:discourse_narrative_bot_enab, false)
[19] pry(main)* end
ArgumentError: No setting named 'discourse_narrative_bot_enab' exists
هذا يعمل إذا وضعت:
[21] pry(main)> SiteSetting.defaults.tap do |s|
[21] pry(main)* if s.has_setting? :discourse_narrative_bot_enab
[21] pry(main)* s.set_regardless_of_locale(:discourse_narrative_bot_enab, false)
[21] pry(main)* end
[21] pry(main)* end
وللتحقق فقط، يفشل مع:
[21] pry(main)> SiteSetting.defaults.tap do |s|
[21] pry(main)* if s.has_setting? :discourse_narrative_bot_enabled
[21] pry(main)* s.set_regardless_of_locale(:discourse_narrative_bot_enab, false)
[21] pry(main)* end
[21] pry(main)* end
لذلك أقترح التغيير التالي في طلب سحب يسعدني تقديمه:
if ENV['LOAD_PLUGINS'] == '1' && s.has_setting? :discourse_narrative_bot_enabled
لسبب ما، لا يمكن ضمان وجود المكون الإضافي للروبوت السردي؟
david
(David Taylor)
2 سبتمبر 2022، 9:56ص
7
في هذه الأمثلة، لديك إعداد الموقع كـ discourse_narrative_bot_enab، وليس discourse_narrative_bot_enabled. أنا أخمن بمجرد تصحيح ذلك، لن يكون قابلاً لإعادة الإنتاج؟
الشيء الأكثر مفاجأة هنا هو:
هذا يشير إلى اختلاف في بيئة التشغيل للمشغلات المجدولة
بالنظر إلى أحد سجلات الفشل يبدو أن GitHub يقوم باستنساخ المكون الإضافي متعدد اللغات مباشرة في دليل plugins، بدلاً من دليل خاص به. لذلك فهو “يزيل تثبيت” جميع المكونات الإضافية الأساسية (ويفشل في تثبيت نفسه بشكل صحيح)
أعتقد أنه لجعل cron يعمل، سنحتاج إلى استبدال جميع تكرارات github.event.repository.name بشيء آخر:
https://github.com/paviliondev/discourse-multilingual/blob/main/.github/workflows/plugin-tests.yml#L40
بالنظر إلى المستندات ، لا يبدو أن هناك طريقة متسقة للحصول على اسم المستودع (بدون المالك)، لذلك سنحتاج إلى بعض الحيل. أعتقد أن هذا يجب أن ينجح:
main ← davidtaylorhq:ci-fix
opened 09:56AM - 02 Sep 22 UTC
https://meta.discourse.org/t/no-setting-named-exists-when-trying-to-run-specs-on… -poll-plugin/199751/5
ملاحظة @cvx - ربما يجب أن نستخدم هذه التقنية في قالب المكون الإضافي/القالب CI؟
إعجابَين (2)
كان هذا متعمداً لإجبار حدوث خطأ (والتعامل معه).
أوه يا إلهي، ملاحظة جيدة شكراً لك!
إعجابَين (2)
main ← davidtaylorhq:ci-fix
opened 09:56AM - 02 Sep 22 UTC
https://meta.discourse.org/t/no-setting-named-exists-when-trying-to-run-specs-on… -poll-plugin/199751/5
تم الدمج، شكراً جزيلاً لك @David ، كان ذلك لطفاً منك.
بالتأكيد على حسابي إذا مررت بمنطقتك!
إعجابَين (2)
للعلم، تم تشغيل اختبارات cron بشكل مثالي، شكرًا لك مرة أخرى.
إعجاب واحد (1)
david
(David Taylor)
27 سبتمبر 2022، 6:24م
11
@cvx شاركني هذا المقال:
Additional information has been added to the payload of github.event for scheduled runs. Before this change, github.event for scheduled runs would only include the cron schedule. This change adds information…
Est. reading time: 1 minute
لذلك، لم يعد من المفترض أن يكون الحل البديل المخترق لاسم المستودع مطلوبًا لوظائف cron م.م @merefield
إعجاب واحد (1)