Plugins do Discourse e configuração/inicializadores do Rails 6: Pergunta

Olá @fzngagan, certamente não sou um “rubyista” e tenho muito menos experiência com Rails do que a maioria dos desenvolvedores de plugins do Discourse; mas dito isso: talvez você possa se virar com algo assim no futuro, caso precise recarregar arquivos no seu plugin sem reiniciar o aplicativo em produção (ou desenvolvimento):

after_initialize do

  # altere o seguinte para o controlador de sua escolha
  # ou use o Application Controller se necessário

  ApplicationController.class_eval do
    before_action :do_my_stuff

    def do_my_stuff
      load File.open(FAIZAANS_FAV_FILE)
    end
  end
end

Isso recarregará os arquivos conforme o esperado.

Estou usando isso atualmente em um plugin da seguinte maneira, e funciona como esperado:

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

Estou usando esse código em um plugin no qual tenho trabalhado de vez em quando, que exibe os nomes dos containers, extraídos de ENV["DATA_NAME"], e também o espaço em disco, extraído de algum código do sistema usando df e grep.

Nas nossas visualizações de administração:

Como mencionado, não sou um Rubyista de forma alguma; mas esse método funciona para mim.

Analisei o código do plugin em instance.rb e, após várias tentativas e erros, decidi seguir com o código class_eval acima. Pode não ser a maneira preferida de fazer as coisas, mas certamente funciona para mim.

Por exemplo, se eu recarregar a página após excluir muitos backups do Discourse, o indicador de espaço em disco muda conforme o esperado.