DiscourseプラグインとRails 6のconfig/initializersに関する質問

@fzngagan さん、こんにちは。私は「Rubyist」ではなく、Discourse プラグイン開発者の多くに比べて Rails の経験も浅いのですが、それでも言わせていただくと:もし本番環境(または開発環境)でアプリケーションを再起動せずにプラグイン内のファイルをリロードする必要がある場合は、将来的には以下のような方法で対応できるかもしれません。

after_initialize do

  # 以下を好みのコントローラーに変更してください
  # または必要であれば Application Controller を使用してください

  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 を使用したシステムコードから解析されたディスク容量を表示するものです。

管理画面のビューでは:

前述の通り、私は Rubyist ではありませんが、この方法でうまくいっています。

instance.rb 内のプラグインコードを検討し、いくつかの試行錯誤の後、上記の class_eval コードを採用することにしました。これがベストプラクティスとは限りませんが、私にとっては確かに機能しています。

例えば、Discourse のバックアップを大量に削除した後にページをリロードすると、ディスク容量インジケーターが期待通りに更新されます。