Hmmmm. That’s a tricky one, because the symlink needed to be deleted, otherwise the Docker mount fails (as it cannot overwrite the existing file).
I had a bit of a google around for solutions, and found an interesting solution which would dereference the symlink and copy the symlink’s target into the specified directory, but couldn’t find anything that would create a Docker volume mount, thus preserving the dynamic link and bi-directional synchronisation. Happy to be steered towards a solution as this would be a neat feature to have.
Estou apenas começando meu primeiro plugin pequeno Tenho algumas perguntas e espero que alguém possa ajudar…
Minha primeira pergunta é: importa se usamos o que está neste guia ou devemos realmente nos esforçar para usar o gerador de plugins?
Isso não foi abordado neste guia, mas como podemos tornar os dados disponíveis para nossos templates a partir do arquivo plugin.rb?
Digamos, por exemplo, que eu queira exibir uma mensagem de boas-vindas aleatória no outlet de plugin topic-above-posts sempre que alguém visitar um tópico, com a mensagem sendo selecionada aleatoriamente de um array no plugin.rb… como enviaria esses dados para o template? O qual, presumo, estaria aqui:
plugins/my_new_plugin/assets/javascripts/discourse/templates/connectors/topic-above-posts/my_new_plugin.hbs (Isso está correto?)
Usar o gerador de plugins é geralmente uma ótima maneira de começar e entender como um plugin deve ser estruturado. Recomendo.
Agora, sobre como colocar código Ruby no front-end: são duas aplicações diferentes. A aplicação de front-end (Ember) terá que solicitá-lo ao servidor (Rails) de alguma forma. Normalmente, fazemos isso por meio de uma chamada AJAX, mas você também poderia adicionar algo ao SiteSerializer para que seja enviado automaticamente como parte dos dados do fórum.
Caso contrário, você precisará pesquisar como adicionar uma rota/controle no Rails e enviar as mensagens como JSON.
Você saberia se há algum tutorial sobre isso? Ou existe um plugin simples (ou até mesmo um plugin de exemplo) que possamos analisar e que nos ajude a seguir na direção certa? (Caso não haja, você poderia rapidamente disponibilizar algo para nós em algum lugar, por favor? Acredito que isso ajudaria muita gente )
Além disso… você tem mais alguma ideia sobre escrever um livro? Posso colocá-lo em contato com alguém se tiver interesse
Obrigado pelo elogio, mas estou definitivamente muito ocupado para considerar escrever um livro. Além disso, livros técnicos têm um alcance SUPER limitado. Aqueles que conheço que escreveram livros dizem que você faz isso por você mesmo, não pelo dinheiro
Não consigo pensar em um plugin simples para retornar algo do lado do servidor. O discourse-tooltips adiciona uma rota e depois a usa para obter pré-visualizações de tópicos ao passar o mouse, o que pode ser útil.
Existe uma lista de hooks onde podemos realmente inserir plugins?
Por exemplo, digamos que queiramos criar um plugin para processar os dados cozinhados em uma postagem antes de serem exibidos. Esperaríamos que houvesse pelo menos um hook no início e outro no final, como (por exemplo):
display_post_start
display_post_complex
Então, nosso plugin se conectaria ao código no local do hook de nossa escolha acima.
Existe uma lista desses hooks de plugin e como eles são chamados no DiscourseWorld?
Atualização: Encontrei isso:
git grep "plugin-outlet" -- "*.hbs"
Mas não vi nenhum outlet para modificar o conteúdo cozinhado de postagens.
Existe um tutorial sobre como criar nossos próprios outlets, por exemplo, um outlet para modificar a parte cozinhada das postagens?
O esqueleto é compatível com Ember 5. Mas se você adicionou algum código JavaScript ou templates HBS, precisará verificar as descontinuações, conforme descrito no anúncio.
Sim, as coisas no package.json estão relacionadas apenas à verificação de estilo, não afetam a funcionalidade ou compatibilidade de um plugin.
Eu também adicionaria uma nota ao usar a configuração do Docker, pois as instruções acima falharão com um erro semelhante a
ambientimpact:~/.../Discourse/discourse$ d/rake plugin:create[neurocracy-date-rewrite]
Cloning 'https://github.com/discourse/discourse-plugin-skeleton' to '/src/plugins/neurocracy-date-rewrite'...
Initializing git repository...
Initialized empty Git repository in /src/plugins/neurocracy-date-rewrite/.git/
Author identity unknown
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: empty ident name (for <discourse@localhost>) not allowed
rake aborted!
Command failed with exit 128: git
/src/lib/tasks/plugin.rake:354:in `system'
/src/lib/tasks/plugin.rake:354:in `block (2 levels) in <main>'
/src/lib/tasks/plugin.rake:344:in `chdir'
/src/lib/tasks/plugin.rake:344:in `block in <main>'
Tasks: TOP => plugin:create
(See full trace by running task with --trace)
Você primeiro precisa configurar seu .gitconfig dentro do contêiner (altere o e-mail e o nome conforme necessário) antes de tentar criar o plug-in: