Parece um bom começo para mim. Agora, só preciso aprender a realmente fazer coisas legais com isso.
Meu primeiro plano é escrever algum código para consultar o banco de dados, para que eu possa obter um valor necessário da tabela post_custom_fields e usá-lo na página de tópicos, atendendo a um pequeno pedido da nossa equipe de moderadores experientes.
Amanhã, vou baixar do git e começar a procurar exemplos de código de banco de dados de outros plugins para me orientar e ver até onde consigo chegar.
Todo pequeno esforço ajuda, e ter um gerador como este para iniciantes na criação de plugins do Discourse, como eu, é muito apreciado. Você pode vê-lo lá embaixo, implorando para ser desenvolvido:
Ao longo dos anos, escrei inúmeros plugins para o vBulletin, então estou realmente animado para criar alguns plugins simples para o Discourse, acredite.
Ainda tentando aprender sobre plugins do Discourse, voltei ao gerador de plugins hoje e tentei isso no ambiente de desenvolvimento no macOS, onde o aplicativo está funcionando bem. Tenho estudado bastante Ruby e Rails e criado pequenos plugins para aprender:
# cd /var/Tim/Discourse/plugins
# rails g plugin DiscourseRacoon
# bundle exec 'rails s'
Tudo parece estar indo bem, e o plugin foi instalado corretamente:
Estou errado ao pensar que as rotas do plugin e o controlador devem funcionar imediatamente (out-of-the-box) após gerar o plugin básico, neste caso, o DiscourseRacoon?
Consultei várias referências online, que indicavam que deveríamos verificar se a rota existia; então, verifiquei o arquivo routes.rb e há rotas definidas lá; também verifiquei o discourse_racoon_controller.rb e o controlador possui um método index (ação).
Desculpe, ainda estou com dificuldades para desenvolver plugins mais interessantes no Discourse. O que estou fazendo de errado? Alguma sugestão sobre qual seria o próximo passo para depurar isso?
Acho que é uma convenção do Rails que preciso aprender? Onde todas as rotas definidas com sublinhados são acessadas com hífens?
DiscourseRacoon::Engine.routes.draw do
get "/" => "discourse_racoon#index", constraints: DiscourseRacoonConstraint.new
get "/actions" => "actions#index", constraints: DiscourseRacoonConstraint.new
get "/actions/:id" => "actions#show", constraints: DiscourseRacoonConstraint.new
end
Gerei um plugin “hello world” com este gerador, adicionei várias instruções Ruby de “gravação em arquivo” e observei o ciclo de vida do Rails. Percebi que os controladores do Rails não estavam funcionando como esperado (eles não registravam nada, o que indicava que estavam sendo ignorados).
Após depurar, consegui fazer isso funcionar como esperado movendo os controladores do Rails um nível acima no diretório.
Além disso, adicionei um controlador e um modelo (template) JavaScript/Ember para a página principal de índice, incluí algum HTML e CSS em todos os modelos e adicionei código JS para ler os cookies e destacar os modelos.
Por exemplo, após algumas alterações no plugin gerado pelo gerador de plugins do Rails:
Para detalhes completos e capturas de tela, consulte:
Para encerrar, gostaria de agradecer ao @j.jaffeux por este gerador de plugins do Rails. Diverti-me muito depurando os controladores do Rails e gostei de modificá-lo para fornecer mais código para inspecionar tanto o ciclo de vida do Rails quanto os modelos/controladores JS.
Espero que minhas alterações ajudem qualquer outra pessoa que, como eu, ainda esteja aprendendo os fundamentos do Discourse no desenvolvimento de plugins no tempo livre e queira usar o gerador de plugins do Rails.
Veja também:
Atualmente, estou me divertindo muito depurando e corrigindo plugins quebrados como parte do processo de aprendizado no desenvolvimento de plugins do Rails e do Discourse
Obrigado por resolver isso, @neounix! Talvez isso seja o empurrão que eu preciso para fazer meu projeto avançar.
Ei @j.jaffeux, mover esses arquivos é a Solução Recomendada, ou eles deveriam ser incluídos com algo como
load File.expand_path('some-path-here', __dir__)
Acho que tentei incluí-los, mas então obtive algum erro sobre algo ausente… (então presumo que fiz a coisa errada e não vale a pena documentar exatamente).
EDIT: Parece que o controlador realmente é carregado/executado ao acessar /plugin-path.
Originalmente, tentei carregar os controladores Ruby com comandos load no plugin.rb, mas eles não registravam o esperado.
Ao testar os controladores Ruby, usei instruções Ruby para registrar no sistema de arquivos e executei um tail -f nesse arquivo de log para verificar como os controladores são acionados.
Por diversão, terminei meu dia de ontem escrevendo um código para ler todas as variáveis de ambiente (ENV) do processo em um cookie com um controlador do Rails e enviá-las para o aplicativo com o controlador Ember.
Na Parte 4 do guia de plugins de @eviltrout, ele recomenda desenvolver o plugin fora da base de código do Discourse e configurar um link simbólico no diretório plugins.
Faria sentido adicionar uma opção -d ~/path/to/plugin_src para gerar o plugin em um diretório diferente e, possivelmente, também configurar o link simbólico?