Периодическая ошибка «плагин не найден»

Я разрабатываю плагин, который упростит подключение установок Discourse к любому пользовательскому приложению вашей организации и позволит отправлять push-уведомления через это приложение (в основном это полезно для iOS, где webpush не работает). Репозиторий плагина находится по адресу GitHub - Sprachprofi/discourse-app-notifications: Send Discourse push notifications through FCM to any custom app · GitHub. В данный момент это требует, чтобы конечный пользователь вручную вставлял ключ устройства из приложения в пользовательское поле на странице Настройки уведомлений после входа в систему.

Моя проблема заключается в том, что когда кто-то устанавливает приложение, входит в систему, а затем пытается скопировать и вставить свой ключ устройства, это не работает: Discourse выдает ошибку «требуемый плагин ‘discourse_app_notifications’ не найден» для действия POST /app_notifications/subscribe (то же самое относится и к действию отписки). Однако, если тот же человек принудительно закроет приложение и повторит тот же шаг, сообщение об ошибке не появится, и push-уведомления будут работать.

Что может заставить Discourse распознавать плагин в одном случае и не распознавать его в другом, когда один и тот же вызов выполняется из приложения? Никаких изменений в установке Discourse за это время не производилось, и это поведение является последовательным и воспроизводимым.

Это не обязательно решает вашу проблему, но может вызвать трудности и определённо затрудняет навигацию по вашему коду для тех, кто не знаком с ним.

Структура вашего плагина очень нетрадиционна, и вам стоит рассмотреть возможность его рефакторинга для соответствия стандартам Zeitwerk.

Не уверен, что это является причиной каких-либо ваших проблем.

У меня была похожая проблема (хотя это, казалось, было предупреждением, а не ошибкой), но изменение строки на следующий вид:

с использованием PLUGIN_NAME, похоже, решило её.

Как сказал Роберт, это может исправить некоторые проблемы, если вы поместите свой контроллер в app/controllers, а не в plugin.rb. Я тоже был в недоумении, где он может находиться.

У меня действительно есть requires_plugin DiscourseAppNotifications::PLUGIN_NAME, поэтому я не совсем понимаю, какое изменение вы предлагаете, если вообще предлагаете?

Причина, по которой плагин структурирован таким образом, заключается в том, что я использовал плагин Pushover Notifications в качестве основы, а не писал код с нуля. Это мой первый плагин, и из-за взаимодействия с приложением отладка в нём печально известна своей сложностью, поэтому я надеялся избежать некоторых ошибок таким способом…

Нет. Это скорее пожимание плечами. У меня была такая проблема, но, кажется, вы сделали то же самое, что и я, чтобы её исправить.

Звучит как то, что я бы тоже сделал.

Rails очень придирчив к целому ряду вещей. Я не знал, что он позволит разместить такие вещи в plugin.rb. И не уверен, что перемещение их в разные места исправит проблему. Извините.

Спасибо, @pfaffman. Я переписал плагин в соответствии с рекомендациями, и теперь он работает!

Новый URL: GitHub - Sprachprofi/discourse-fcm-notifications: Send Discourse push notifications through FCM to any custom app · GitHub

Рада, что получилось!