为什么我的插件几个月后停止工作了?

您好,我写了一个非常基础的插件,它在用户登录后会添加一个 JWT 令牌,并且已经正常运行了将近一年。今天我们的论坛宕机了,因为不知何故证书过期了(这本身就很奇怪),所以我尝试运行 ./launcher app rebuild,但由于插件中的一个错误,重建失败了。

I, [2022-01-27T00:16:48.616458 #1]  INFO -- : > cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
** PLUGIN FAILURE **

You are unable to build Discourse due to this error during plugin
initialization:

uninitialized constant Auth::DefaultCurrentUserProvider

/var/www/discourse/plugins/discourse-jwt-session/lib/jwt_current_user_provider.rb:3:in `<main>'

插件中相关的代码行只是:

class JwtCurrentUserProvider < Auth::DefaultCurrentUserProvider

我无法想象为什么这会突然停止工作,因为 lib/auth/current_user_provider.rb 中似乎没有任何相关的更改,所以该常量应该仍然存在。除非加载库和插件的顺序发生了变化?

app.yaml 中注释掉该插件可以使重建成功完成。取消注释它会再次导致失败。

作为背景,我们正在运行版本 2.8.0beta4。您是否知道突然发生这种情况的原因?

我在寻找同样问题的解决方案时找到了这个主题,同时我也找到了一个解决方案。

类定义中的 include 现在应该放在 after_initialize 块内,否则它将不再起作用。

2 个赞

根据:

我确认您的修复似乎解决了 @wilson29thid 的问题 :slight_smile:

1 个赞

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