嘿 @fzngagan,我当然算不上是"Ruby 专家”,在 Rails 方面的经验也比大多数 Discourse 插件开发者少得多;但话说回来:如果你需要在不重启应用(无论是在生产环境还是开发环境)的情况下重载插件中的文件,未来或许可以尝试像下面这样的方法:
after_initialize do
# 将以下内容更改为你选择的控制器
# 或者,如果需要,也可以使用 Application 控制器
ApplicationController.class_eval do
before_action :do_my_stuff
def do_my_stuff
load File.open(FAIZAANS_FAV_FILE)
end
end
end
这将按预期重载文件。
我目前在一个插件中就是这样使用的,效果符合预期:
after_initialize do
Admin::AdminController.class_eval do
before_action :do_neo_plugin_info
def do_neo_plugin_info
load File.open(PLUGIN_LOGIC)
end
end
end
我目前在一个间歇性开发的插件中使用这段代码,它用于显示容器名称(从 ENV["DATA_NAME"] 解析)以及通过系统代码使用 df 和 grep 解析出的磁盘空间。
在我们的管理视图中:
如前所述,我绝非 Ruby 专家;但这个方法对我很有效。
我查看了 instance.rb 中的插件代码,在尝试了不同的方法并经历了一些错误后,我决定采用上面的 class_eval 代码。这可能不是最佳实践,但它确实对我有效。
例如,如果在删除大量 Discourse 备份后刷新页面,磁盘空间指示器会按预期发生变化。
