Gerador de plugins Rails

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.

Obrigado novamente, @j.jaffeux.

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.

2 curtidas

Olá @j.jaffeux

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:

Screen Shot 2020-08-11 at 1.26.36 PM

Mas quando acesso a rota:

http://localhost:3000/discourse_racoon

Não está funcionando:

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?

Obrigado.

1 curtida

É /discourse-racoon, não /discourse_racoon

rake routes | grep racoon

                         discourse_racoon          /discourse-racoon                                                           DiscourseRacoon::Engine
        GET  /                      discourse_racoon/discourse_racoon#index
actions GET  /actions(.:format)     discourse_racoon/actions#index
        GET  /actions/:id(.:format) discourse_racoon/actions#show
5 curtidas

Olá @j.jaffeux

Obrigado!

Foi isso mesmo.

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
1 curtida

Olá,

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:

http://localhost:3000/hello-world/

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 :slight_smile:

5 curtidas

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.

3 curtidas

Olá @pfaffman

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.

Muito divertido!

Estou viciado LOL

3 curtidas

A parte da URL está no lado esquerdo, a referência ao código Ruby está no lado direito do =>. O _ versus - é definido na linha mount do engine.

4 curtidas

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?

1 curtida

Desculpe, mas posso descontinuar isso e fechar o tópico por enquanto.

Embora seja menos poderoso em termos de personalização, nossa maneira preferida de iniciar um plugin agora é usar GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins · GitHub como modelo (veja o botão verde USAR ESSE MODELO).

É muito mais fácil para nós manter isso atualizado.

6 curtidas