مشكلة مع إعادة تحميل Zeitwerk

لقد تم تحديد مشكلة جديدة على ما يبدو، وأعتقد أنني كنت أعرف بوجودها ولكنني تجاهلتها دائمًا. الآن لا يمكنني تجاهلها لأنها تتسبب في فشل الاختبارات. إليك مساراتي:

# frozen_string_literal: true
require_dependency "pfaffmanager_constraint"

Pfaffmanager::Engine.routes.draw do
  get "/" => "pfaffmanager#index", :constraints => PfaffmanagerConstraint.new
  get "/servers" => "servers#index", :constraints => PfaffmanagerConstraint.new
  #      get "#{root_path}/:username/messages/group/:group_name" => "user_actions#private_messages", constraints: { username: RouteFormat.username, group_name: RouteFormat.username }
  get "/servers/group/:group_name" => "servers#index",
      :constraints => PfaffmanagerConstraint.new
  get "/find/:s" => "servers#index", :constraints => PfaffmanagerConstraint.new
  get "/group/:group_name" => "servers#index",
      :constraints => PfaffmanagerConstraint.new
  get "/inventory/:group_name.json" => "servers#inventory",
      :constraints => PfaffmanagerConstraint.new
  get "/servers/:id" => "servers#show",
      :constraints => PfaffmanagerConstraint.new
  get "/servers/:id/edit" => "servers#edit",
      :constraints => PfaffmanagerConstraint.new
  put "/servers/:id" => "servers#update",
      :constraints => PfaffmanagerConstraint.new
  delete "/servers/:id" => "servers#delete",
         :constraints => PfaffmanagerConstraint.new
  put "/status/:id" => "servers#update_status",
      :constraints => AdminConstraint.new
  post "/api_key/:id" => "servers#set_api_key",
       :constraints => PfaffmanagerConstraint.new
  put "/update_server_status/:id" => "servers#update_server_status",
      :constraints => PfaffmanagerConstraint.new
  post "/upgrade/:id" => "servers#queue_upgrade",
       :constraints => PfaffmanagerConstraint.new
  put "/install/:id" => "servers#install",
      :constraints => PfaffmanagerConstraint.new
  get "/ssh_key/:id" => "serverkeys#get_pub_key"
  get "/ssh-key/:hostname" => "serverkeys#get_pub_key_by_hostname",
      :constraints => {
        hostname: %r{[^/]+}
      }
  post "/servers" => "servers#create",
       :constraints => PfaffmanagerConstraint.new
end

Discourse::Application.routes.append do
  mount ::Pfaffmanager::Engine, at: "/pfaffmanager"
end

وهذا هو الفشل:

/home/pfaffman/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/actionpack-7.0.7/lib/action_dispatch/routing/route_set.rb:588:in `add_route': Invalid route name, already in use: 'pfaffmana
ger'  (ArgumentError)                                                                                                                                                                         
You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restri
ct the routes created with `resources` as explained here:                                                                                                                                     
https://guides.rubyonrails.org/routing.html#restricting-the-routes-created                                                                                                                    
                                                                                                                                                                                              
          raise ArgumentError, "Invalid route name, already in use: '#{name}' \n" \                                                                                                           
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                                                                             
        from /home/pfaffman/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/actionpack-7.0.7/lib/action_dispatch/routing/mapper.rb:1985:in `add_route'   
        from /home/pfaffman/.asdf/installs/ruby/3.2.2/lib/ruby/gems/3.2.0/gems/actionpack-7.0.7/lib/action_dispatch/routing/mapper.rb:1956:in `decomposed_match'  
إعجابَين (2)

هل رأيت هذا الموضوع؟ إذا اتبعت الهيكل هناك (وفي هيكل المكون الإضافي)، فيجب أن تسير الأمور بسلاسة تامة:

جزء مهم من التحميل التلقائي لـ Zeitwerk هو أسماء/مسارات الملفات، لذا من الصعب تحديد المشكلة من المقتطف الذي شاركته. هل هذا في ملف plugin.rb؟ أم في ملف آخر؟

إعجابَين (2)

آسف. هذا هو config/routes.rb

ولكن لدي أيضًا . . . أشياء . . . في lib/discourse-pfaffmanager/engine.rb، لذا ربما أحتاج إلى نقل الأشياء من routes.rb إلى lib/pfaffmanager/engine.rb. قراءة الدليل مرة أخرى.

إعجاب واحد (1)

أعتقد أنك ربما تحتاج إلى إجراء هذا التغيير:

- Discourse::Application.routes.append do
+ Discourse::Application.routes.draw do

بهذه الطريقة، يمكن “إعادة تحميل” الملف عدة مرات دون التسبب في تعارض. (سيحل “draw” محل أي مسار موجود، بينما سيثير “append” خطأ إذا كان هناك تعارض)

وهذا سيجعله يتطابق أيضًا مع هيكل المكون الإضافي الحالي:

3 إعجابات

لقد نجح الأمر!

(سيستبدل draw أي مسار موجود، بينما سيؤدي append إلى ظهور خطأ في حالة حدوث تعارض)

من الواضح دائمًا عندما يتم اكتشاف الحل.

شكرًا جزيلًا.

(الآن إذا كان بإمكاني جعل vscode يقوم بالتدقيق عند حفظ الملفات، ولكنه يحدث الآن محليًا قبل أن يصل إلى github. . . )

إعجاب واحد (1)

نعم، هذا بالضبط تغيير قمت به مؤخرًا.

3 إعجابات

هذا يجعلني أشعر بتحسن طفيف. . .

لكن هل استغرق الأمر 4 ساعات؟ :crying_cat_face:

شكرًا مرة أخرى، ديفيد. أقدر دعمك حقًا.

إعجابَين (2)

ليس في هذه المناسبة، أحيانًا تكون محظوظًا ؛). في هذه المناسبة، صادف أن قرأت دليل ديفيد وأخذت ملاحظة لهذا الاختلاف في الكود الذي كنت أتبعه في الأصل.

ولكن بالتأكيد، بعض المشكلات تتطلب نزهة في الحديقة المحلية في اليوم التالي لإصلاحها :deciduous_tree:

إعجاب واحد (1)

للعلم، إذا نشرت دليلاً حول شيء ما، فعادةً ما يكون ذلك بسبب أنني قضيت ساعات/أيامًا عديدة في محاولة فهمه بنفسي :sweat_smile:. كل هذه الأمور المتعلقة بـ Zeitwerk تقع بالتأكيد ضمن هذه الفئة!

:100: :chefs_kiss:

تم التسجيل. أنا آكلهم جميعًا عندما تنشر. كان يجب أن أبحث فقط عن zeitwork وربما كنت سأجدها. ولكن حتى في ذلك الحين، كانت المشكلة حرفيًا كلمة واحدة بدت غير مؤذية للغاية.

الآن أحاول تحويل كل ما لدي من {{blah... إلى \u003cblah... . هذا يقتلني. لكن أعتقد أنني أفهمها (بشكل كافٍ للقيام بذلك في غضون أيام قليلة أخرى).

إعجابَين (2)

تم إغلاق هذا الموضوع تلقائيًا بعد 30 يومًا من آخر رد. لم يعد يُسمح بالردود الجديدة.