O Launcher run app apresenta erro ao tentar fazer backup

Isso me dá apenas erros, iniciando o Redis.

/var/discourse/launcher run app "echo 'BackupRestore::Backuper.new(Discourse.system_user.id, with_uploads: false).run' | rails c"

Se eu usar a rota do rails c, o backup funciona. Mas essa linha única também deveria funcionar — ou funcionava em 2020 (ou foi em -22…)

E o que eu realmente tento fazer é obter apenas um dump do banco de dados, compactado, em um local onde eu possa movê-lo para o S3. E não, eu não quero fazer isso manualmente, o backup deve ser automatizado. E não, uma vez por dia não é suficiente, porque eu não quero perder o conteúdo de 24 horas se algo der muito errado.

Apenas adicionando um link de referência (de 2020) caso precise ser atualizado:

Você quer dizer conectar ao redis? Qual é o erro real que você vê?

launcher run app executa um comando em um novo contexto de contêiner, então o redis não estará em execução. Isso só funcionaria se o redis for externo.

O seguinte deve funcionar, pois é executado no contexto do contêiner existente:

docker exec -i app rails c <<<'BackupRestore::Backuper.new(Discourse.system_user.id, with_uploads: false).run'

Por que você está fazendo o acima em vez de, por exemplo, o mais simples discourse backup --sql-only?

Você também pode dizer ao Discourse para usar o S3 diretamente como um local para backups, se desejar.

2 curtidas

Porque Docker e contêineres são lugares horríveis, onde nada funciona, como crontab e nano :joy: Eu sei, mais ou menos, o que faço quando vejo /var/discourse, mas depois de ./launcher enter app eu me perco totalmente. É por isso que meu servidor Mastodon faz backup de si mesmo, mas o Discourse não (bem, uma vez por dia sim, mas ainda assim).

Sim, eu sei que discourse backup faz o que eu quero, ele até envia o dump para o S3, mas eu não sei como programá-lo — por causa dessa coisa de contêiner horrível e assustadora, que é um sistema operacional dentro de um sistema operacional.

Você tem um agendador fora do contêiner disponível, certo?

Você pode agendá-lo lá, por exemplo:

# colocar no crontab do host
# executar backup uma vez a cada 4 horas na hora cheia
0 */4 * * * docker exec app discourse backup --sql-only
5 curtidas

Foi tão fácil que foi quase o maior anticlímax do dia. E agora tenho um awscli totalmente sem uso.

docker exec é a chave aqui… agora tenho uma coisa sólida para começar a pesquisar no Google.

Obrigado!

3 curtidas

Ah, sim… esse erro:

Couldn't connect to Redis
bundler: failed to load command: pry (/var/www/discourse/vendor/bundle/ruby/3.3.0/bin/pry)
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/redis-4.8.1/lib/redis/client.rb:398:in `rescue in establish_connection': Error connecting to Redis on localhost:6379 (Errno::ECONNREFUSED) (Redis::CannotConnectError)

E depois disso veio uma lista quilométrica onde cada linha começava com from e havia um zilhão de coisas diferentes do Ruby, gems, etc. Não parecia muito interessante.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.