Caminho dos componentes do tema

Olá!

Quero fazer a atualização para a versão mais recente, mas estou enfrentando alguns problemas com componentes de temas.
Todos eles são meus próprios componentes e os movi do GitHub para o GitLab. Agora, quando tento atualizar o Discourse (não diretamente pelo próprio Discourse), ocorrem erros porque eles não estão mais disponíveis. Tentei excluí-los dentro do Discourse, mas não consegui.
Agora, minha pergunta é: qual é o caminho para excluí-los diretamente no servidor? Não consigo encontrá-los.

Tentei o modo seguro, mas não consigo acessar o fórum nesse modo.


EDIT:

Existe algum arquivo, semelhante ao app.yml, onde todos os temas e componentes são armazenados, para que eu possa remover a lista e reconstruir o Discourse sem eles?

Acho que esse é o problema que você precisa resolver. A maneira correta de abordar isso é excluir todos os temas e componentes de tema que vêm do local antigo e importar novos a partir de seus novos locais.

2 curtidas

Isso não é possível, pois o Discourse ficaria em um loop infinito. Por isso, perguntei como excluí-los de outra forma.
Eu nem consigo entrar no modo de segurança.
Uma reinstalação também não é possível porque o backup está muito antigo.
Após executar ./launcher rebuild app, notei que o fórum não está disponível para visitantes.

Então, como posso fazê-lo funcionar novamente?

1 curtida

Por que não? O que acontece em vez disso?

A idade do backup não deveria importar; até backups de 5 anos atrás são restaurados sem problemas.

Para ser honesto, parece que os componentes do tema são o menor dos seus problemas.

Se a desinstalação deles for impossível pela interface, temo que outros métodos também falharão.

1 curtida

Acho que desabilitar componentes manualmente no banco de dados é o tipo de solução que poderia ser o último recurso aqui. É altamente arriscado, mas viável se não houver outras opções.

Componentes desabilitados permitirão, pelo menos, que a reconstrução seja bem-sucedida, o que, por sua vez, permitirá o acesso à interface de administração para remover e reinstalar componentes do GitLab.

1 curtida

Nada acontece, o site não está disponível no modo seguro.

Claro que importa, porque todos os posts após o último backup foram perdidos.

E não, o fórum funcionava bem até que tentei fazer a atualização antes de remover os componentes.

@itsbhanusharma
Obrigado pela sua resposta. Eu não sabia que o tema e os componentes são armazenados no banco de dados.

Como posso acessar o banco de dados?

EDIT:
Ok, estou no banco de dados e acho que é a tabela theme_settings.
Como deletar todos os componentes?

Eu li sua postagem incorretamente; achei que você tivesse dito que era muito antiga porque a restauração falhou.

1 curtida

Eles não são armazenados no banco de dados; no entanto, o estado de ativação/desativação deles é armazenado no próprio banco de dados.

Não lembro exatamente os passos, mas recentemente corrigi uma instalação com problema semelhante.

O mais importante aqui é saber se seu contêiner ainda está em execução. Se estiver, posso dar orientações sobre como tentar desativar os componentes problemáticos diretamente no banco de dados.

Sim, o container ainda está em execução.
Desabilitar os componentes me ajudaria muito.

Eles são completamente armazenados no banco de dados (tabelas que começam com theme*)

E como posso excluí-los (não tudo na tabela)?

De cabeça - execute isso no console do Rails. Encontre o ID do tema na URL ao visualizá-lo.

t = Theme.find(123)
t.enabled = false
t.save

Bom, ok, isso é um problema.
Não seria possível usar algo como o pgAdmin para acessar o banco de dados diretamente?
Não sei o ID do tema e dos componentes porque não tenho mais acesso à área administrativa.


Edição:
Descobri o tema e os componentes.
Desativá-los não funciona, então como excluí-los com o rails c?
Até tentei removê-los com o rake, mas o rake também não consegue excluí-los.

Você pode compartilhar mais detalhes? Você recebe um erro? Se sim, qual é o erro? Ou não tem nenhum efeito?

rake themes:uninstall https://github.com/link/to/git.git
rake aborted!
Não sei como executar a tarefa 'themes:uninstall' (Veja a lista de tarefas disponíveis com `rake --tasks`)
Você quis dizer?  themes:install
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
(Veja o rastro completo executando a tarefa com --trace)

Ou qual é o comando correto para deletar coisas com rake?

Eu obtenho uma lista de comandos com rake --tasks e rake -AT, mas não há um comando para deletar um tema ou um componente.

Com rails c posso desativar um tema, mas com um recarregamento, o tema antigo corrompido ainda aparece.

Theme.where(user_selectable: true).update_all(user_selectable: false)
Theme.where(auto_update: true).update_all(auto_update: false)
Theme.clear_default!

Você pode tentar executar isso no console do Rails e ver se consegue carregar seu site depois? Se não, pode tentar reconstruir?

6 curtidas

Tive que reconstruí-lo após seus comandos e funcionou, e meu fórum está de volta online! :+1: :slightly_smiling_face:

Muito obrigado a todos que me ajudaram!

1 curtida

Ei @Osama. Tenho me preocupado ultimamente com o problema de theme-components-can-break-a-rebuild.

Acho que precisamos de um howto para abordar isso.

Acredito que essa correção aqui resolve apenas o caso de “build quebrado porque a URL do GitHub está quebrada”, certo?

Para builds quebrados devido a um erro no JavaScript, existe uma maneira similar de desativar ou remover temas via linha de comando que deveríamos incluir em um howto?

EDIT: como quando falha ao incluir “Alternative Logos”. . .

Também tenho pensado sobre isso há algum tempo, e minha opinião é que isso faz sentido para algumas comunidades, mas não para todas. Algumas comunidades tratam suas customizações/temas como parte fundamental da identidade do site e realmente querem saber se há problemas com suas customizações quando o site é implantado. Outras comunidades usam uma instalação padrão do Discourse com algumas customizações ou componentes adicionados por cima e poderiam facilmente ficar alguns dias sem eles.

Talvez a caixa de seleção “Atualizar automaticamente quando o Discourse for atualizado” deva vir desmarcada por padrão ao instalar um novo tema ou componente? Atualmente, ela vem marcada por padrão, e acho que deveria vir desmarcada, mas isso precisa de uma discussão mais ampla…

Não, o trecho de código acima (a segunda linha, em particular) desativa a atualização automática na implantação para todos os temas/componentes atualmente instalados. Portanto, deve corrigir qualquer construção quebrada devido à atualização automática de temas, incluindo erros de JS/CSS. O howto deve incluir apenas a segunda linha.

1 curtida

Acabei de encontrar esse problema também. Se você tiver um componente vinculado a um repositório público e depois tornar esse repositório privado, as recompilações falham. É desagradável porque os usuários podem fazer alterações que podem quebrar o site para os administradores de sistema meses depois.

Os comandos em Path of theme components - #16 by Osama funcionaram muito bem para mim. Eu adicionaria instruções sobre como entrar no console do Rails.

./launcher start app
./launcher enter app
rails c