Estou desenvolvendo um plugin que facilitará a conexão de instalações do Discourse a qualquer aplicativo personalizado que sua organização possa ter e entregará notificações push através desse aplicativo (principalmente útil para iOS, onde o webpush não funciona). O repositório do plugin é GitHub - Sprachprofi/discourse-app-notifications: Send Discourse push notifications through FCM to any custom app. Atualmente, isso exige que o usuário final cole manualmente a chave do dispositivo do aplicativo em um campo personalizado na página Preferências de Notificações após o login.
Meu problema é que, quando alguém instala o aplicativo, faz login e, em seguida, copia e cola sua chave de dispositivo, não funciona. O Discourse retorna “plugin obrigatório ‘discourse_app_notifications’ não encontrado” para a ação POST /app_notifications/subscribe (e o mesmo para a ação unsubscribe). No entanto, quando a mesma pessoa força o encerramento do aplicativo e tenta o mesmo passo novamente, não há mensagem de erro e as notificações push funcionam.
O que poderia possivelmente fazer com que o Discourse reconheça o plugin em um caso e não o reconheça no outro, quando a mesma chamada é feita de dentro do aplicativo? Nenhuma alteração foi feita na instalação do Discourse nesse ínterim e esse comportamento é consistente e reproduzível.
Isso não necessariamente resolve seu problema, mas pode causar problemas e definitivamente torna seu código mais difícil de navegar para os não iniciados.
A estrutura do seu plugin é muito não convencional e você deve considerar refatorá-lo para corresponder aos padrões do Zeitwerk.
Não tenho certeza se isso causará algum dos seus problemas.
Tive um problema semelhante (embora parecesse um aviso e não um erro), mas fazer minha linha assim:
usar o PLUGIN_NAME parece ter corrigido.
Como Robert disse, pode corrigir algumas coisas se você colocar seu controlador em app/controllers em vez de em plugin.rb. Eu também fiquei confuso sobre onde poderia estar.
Eu tenho requires_plugin DiscourseAppNotifications::PLUGIN_NAME, então não tenho certeza de qual alteração você está sugerindo, se houver?
A razão pela qual o plugin é estruturado desta forma é porque usei o plugin Pushover Notifications como base em vez de codificar do zero. É meu primeiro plugin e, devido à interação com o aplicativo, é notoriamente difícil de depurar, então eu esperava evitar alguns bugs desta forma…
Não. É mais um encolher de ombros. Eu tive o problema, mas você parece ter feito o que eu fiz para consertá-lo.
Parece o que eu teria feito.
O Rails é realmente exigente com um monte de coisas. Eu não sabia que ele permitiria que você colocasse essas coisas em plugin.rb. E eu não sei se mover as coisas para um monte de lugares diferentes vai consertar isso. Desculpe.