Un test apparentemente nuovo ha identificato un problema che penso di aver sempre saputo di avere, ma che ho sempre ignorato. Ora non posso più ignorarlo perché fa fallire i test. Ecco le mie route:
# 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
E fallisce così:
/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}' \
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
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'
Hai visto questo argomento? Se segui la struttura lì (e nello scheletro del plugin), le cose dovrebbero funzionare abbastanza bene:
Una parte importante dell’autocaricamento di Zeitwerk sono i nomi/percorsi dei file, quindi è difficile identificare il problema dallo snippet che hai condiviso. È in un file plugin.rb? O in qualche altro file?
Ma ho anche . . . roba . . . in lib/discourse-pfaffmanager/engine.rb, quindi forse devo spostare la roba da routes.rb in lib/pfaffmanager/engine.rb. Leggere il manuale (RTFM) ancora un po’.
Penso che probabilmente devi apportare questa modifica:
- Discourse::Application.routes.append do
+ Discourse::Application.routes.draw do
In questo modo, il file può essere “ricaricato” più volte senza causare un conflitto. (‘draw’ sostituirà qualsiasi route esistente, mentre ‘append’ solleverà un errore in caso di conflitto)
Ciò lo renderebbe anche corrispondente all’attuale plugin-skeleton:
Non in questa occasione, a volte si è fortunati ;). In questa occasione mi è capitato di leggere la guida di David e ho preso nota di quella differenza rispetto al codice che stavo seguendo originariamente.
Ma certo, alcuni problemi richiedono una passeggiata nel parco locale il giorno dopo per essere risolti
Per tua informazione, se pubblico una guida su qualcosa, è generalmente perché ho perso molte ore/giorni cercando di capirlo da solo . Tutta questa roba di Zeitwerk rientra decisamente in quella categoria!
Annotato. Li mangio tutti quando li pubblichi. Avrei dovuto cercare solo zeitwork e forse l’avrei trovato. Ma anche allora, il problema era letteralmente una sola parola che sembrava così innocua.
Ora sto cercando di trasformare tutto il mio {{blah... in \u003cblah... . Mi sta uccidendo. Ma penso di aver capito (abbastanza bene da farlo tra qualche giorno).