Reconstruir o fórum usando código?

Tive algumas ideias aleatórias que me ocorreram, e uma delas foi um plugin para instalar plugins. Isso requer uma reconstrução do fórum. Existe uma maneira de reconstruir usando Ruby? Eu realmente não quero tentar:

p `cd ../../`
p `. /launcher rebuild app`
3 curtidas

Em uma instalação padrão, o Discourse (e, portanto, os plugins) é executado dentro de um contêiner Docker. Esse contêiner não tem acesso completo ao sistema de arquivos do host, portanto, não pode acessar o diretório /var/discourse do host para modificar app.yml ou executar launcher.

E mesmo que pudesse… há uma pequena dependência circular aqui. Executar ./launcher rebuild mataria o contêiner Docker… o que mataria o launcher rebuild que você iniciou a partir do plugin :boom:

Existem soluções potenciais aqui. Por exemplo, adicionar montagens de volume Docker adicionais, para que a configuração/launcher possa ser acessada de dentro do contêiner. Mas não é trivial.

Se bem me lembro, alguém já criou um plugin ‘gerenciador de plugins’… que exigia alguns ajustes no app.yml para adicionar coisas como a montagem de volume. Mas não consigo encontrar nenhum tópico sobre isso agora, então presumo que não seja mais mantido. Talvez alguém possa compartilhar um link se conseguir encontrá-lo? (ou talvez tenha sido tudo um sonho :sweat_smile:)

Do lado da CDCK, definitivamente optamos por usar temas quando queremos que os clientes possam instalar/atualizar/desinstalar à vontade. Permitir que as pessoas instalem plugins arbitrariamente não é uma opção, pois isso afetaria outros clientes que executam no mesmo servidor.

5 curtidas

Sim, aqui está:

5 curtidas

Hmm… entendi.

Oh, ops, não pensei nisso!

1 curtida

Dashboard.literatecomputing.com instalará e removerá plugins editando o app.yml (ou web_only.yml) e executando a reconstrução (na verdade, bootstrap, destroy, rebuild). Em uma instalação de dois contêineres, o tempo de inatividade é mínimo.

Ele também faz coisas como atualizar o docker e o postgres, docker prune, e assim por diante. Como tudo gerencia uma instalação padrão, você não está preso a ele e ele não pode quebrar nada, a menos que esteja realmente fazendo algo (como instalar um plugin ruim).

É um plugin do Discourse (privado) que aciona um playbook do Ansible. Você pode entrar no grupo de teste gratuito e usá-lo gratuitamente (com suporte limitado).

4 curtidas

Este plugin parece apenas clonar o repositório na pasta /plugins. Interessante.

O ProCourse Installer foi incrível! É uma pena que tenha criado problemas para alguns plugins.

3 curtidas

Você pode fazer algo como isto dentro do contêiner para adicionar um plugin a um contêiner existente:

cd /var/www/discourse/plugins
git clone my-plugin-url
rake db:migrate assets:precompile
sv restart unicorn

Mas os problemas de manter os plugins no contêiner e no app.yml para quando você reconstruir em seguida existem.

Fui queimado várias vezes fazendo ./launcher destroy app;./launcher start app para aplicar novas variáveis de ambiente de app.yml apenas para descobrir que o contêiner “novo” está atrás da versão que o banco de dados tem. É ainda pior se alguém atualizou apenas alguns plugins no contêiner que funcionaram com a versão do Discourse que estava no contêiner antigo, mas não com a que você obtém ao reconstruir. . .

3 curtidas

É por isso que o plugin ProCouese apenas clonou os repositórios e só pode ser removido através da página do plugin para rm -rf a pasta do plugin clonado.

1 curtida

Na verdade, funcionou razoavelmente bem como uma prova de conceito. Poderia usar alguns ajustes, pois foi dito que poderia dificultar a solução de problemas. Então, talvez precise de algumas informações de linha de comando sobre como acessar o instalador do procouree. Talvez um arquivo de log melhor.

A vantagem é que você pode desabilitar todos os plugins simplesmente removendo/comentando o instalador do pro course. Embora esteja quebrado agora.

Joe tem algumas ideias muito avançadas. Se bem me lembro, ele fez o plugin inicial de Post Voting?