间歇性“未找到插件”错误

我正在开发一个插件,可以轻松地将 Discourse 安装连接到您的组织可能拥有的任何自定义应用程序,并通过该应用程序发送推送通知(主要适用于不支持 webpush 的 iOS)。插件存储库是 https://github.com/Sprachprofi/discourse-app-notifications。目前,这要求最终用户在登录后,将应用程序中的设备密钥手动粘贴到“通知设置”页面上的自定义字段中。

我的问题是,当有人安装应用程序、登录然后复制粘贴他们的设备密钥时,它不起作用,Discourse 在执行 POST /app_notifications/subscribe 操作时会显示“找不到必需的插件 ‘discourse_app_notifications’”(unsubscribe 操作也是如此)。但是,当同一个人强制退出应用程序然后再次执行相同的步骤时,不会出现错误消息,并且推送通知确实有效。

在同一次从应用程序内部调用时,可能是什么原因导致 Discourse 在一种情况下识别插件而在另一种情况下不识别它? 此期间未对 Discourse 安装进行任何更改,并且此行为是一致且可重现的。

这并不一定能解决您的问题,但可能会导致问题,并且肯定会让不熟悉的人更难理解您的代码。

您的插件结构非常不寻常,您应该考虑将其重构以符合 Zeitwerk 标准。

我不确定这是否会导致您遇到的任何问题。

2 个赞

我遇到了类似的问题(虽然似乎是警告而不是错误),但将我的行改为如下:

使用 PLUGIN_NAME 似乎解决了它。

正如 Robert 所说,如果你将控制器放在 app/controllers 而不是 plugin.rb 中,可能会解决一些问题。我也曾对它应该放在哪里感到困惑。

1 个赞

我确实有 requires_plugin DiscourseAppNotifications::PLUGIN_NAME,所以我不太确定您建议的更改是什么,如果有的话?

该插件之所以这样构建,是因为我使用了 Pushover Notifications 插件作为基础,而不是从头开始编码。这是我的第一个插件,由于与应用程序的交互,它出了名的难以调试,所以我想通过这种方式避免一些错误……

1 个赞

不。这主要是耸耸肩。我遇到了问题,但您似乎已经解决了我的问题。

听起来就像我会做的那样。

Rails 对很多事情都很挑剔。我不知道它会让您将那些东西放入 plugin.rb。而且我不知道将东西移到很多不同的地方是否能解决问题。抱歉。

谢谢你,@pfaffman。我已按照指南重写了插件,现在可以正常工作了!

新网址:GitHub - Sprachprofi/discourse-fcm-notifications: Send Discourse push notifications through FCM to any custom app

1 个赞

太好了,那奏效了!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.