La aplicación de inicio da error al intentar hacer una copia de seguridad

Esto solo me da errores, al iniciar Redis.

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

Si tomo la ruta de rails c, la copia de seguridad funciona. Pero esa línea única también debería funcionar, ¿o funcionaba antes en 2020 (o fue en -22…)?

Y lo que realmente intento hacer es obtener solo un volcado de la base de datos, empaquetado, en un lugar donde pueda moverlo a S3. Y no, no quiero hacerlo manualmente, la copia de seguridad debe ser automatizada. Y no, una vez al día no es suficiente, porque no quiero perder el valor de 24 horas de cosas si algo sale muy mal.

Solo enlazo la referencia (de 2020) en caso de que deba actualizarse:

¿Te refieres a conectarte a redis? ¿Cuál es el error real que ves?

launcher run app ejecuta un comando en un nuevo contexto de contenedor, por lo que redis no se estará ejecutando. Esto solo funcionaría si redis es externo.

Lo siguiente debería funcionar ya que se ejecuta en el contexto del contenedor existente:

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

¿Por qué haces lo anterior en lugar de, por ejemplo, el más simple discourse backup --sql-only?

También puedes indicarle a Discourse que use S3 directamente como ubicación para las copias de seguridad, si lo deseas.

2 Me gusta

Porque Docker y los contenedores son lugares horribles, donde nada funciona, como crontab y nano :joy: Sé, más o menos, lo que hago cuando veo /var/discourse, pero después de ./launcher enter app estoy totalmente perdido. Por eso mi servidor Mastodon se hace copias de seguridad, pero Discourse no (bueno, una vez al día sí, pero aun así).

Sí, sé que discourse backup hace lo que quiero, incluso envía el volcado a S3, pero no sé cómo programarlo — porque esa cosa horrible y aterradora de contenedor, que es un sistema operativo dentro de un sistema operativo.

Tienes un programador fuera del contenedor disponible, ¿verdad?

Puedes programarlo allí, por ejemplo:

# poner en el crontab del host
# ejecutar copia de seguridad una vez cada 4 horas en punto
0 */4 * * * docker exec app discourse backup --sql-only
5 Me gusta

Fue tan fácil que fue casi el mayor anticlímax del día. Y ahora tengo una awscli totalmente inútil.

docker exec es la clave aquí… ahora tengo algo sólido para empezar a buscar en Google.

¡Gracias!

3 Me gusta

Ah sí… ese error:

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)

Y después de eso había una lista de una milla de largo donde cada línea comenzaba con from y había un zillón de cosas diferentes de Ruby, gemas, etc. No parecía muy interesante.

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