Je souhaite exécuter des tâches automatisées de nettoyage des utilisateurs depuis le Bash de l’hôte. Manuellement, j’exécute :
/var/discourse/launcher enter app
rails c
UserDestroyer.new(Discourse.system_user).destroy(User.find_by_username_or_email("user@example.com"), delete_posts: false)
J’ai une longue liste de noms d’utilisateurs dans un fichier texte qui doivent être supprimés. L’exécution manuelle n’est pas raisonnable. J’ai essayé d’encapsuler la commande de suppression dans un script bash. Lors de l’exécution de rails c avec la sous-commande launcher app, la connexion Redis échoue :
/var/discourse/launcher run app "echo \"User.find_by_username_or_email('user@example.com')\" | rails c"
Failed to report error: Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) 2 Error connecting to Redis on localhost:6379 (Errno::EADDRNOTAVAIL) subscribe failed, reconnecting in 1 second.
Cependant, lorsque je compare les environnements avec export entre launcher enter app et launcher run app, ils semblent presque identiques. Qu’est-ce que je rate ? launcher run démarre dans / tandis que launcher enter entre directement dans /var/www/discourse. Utiliser un cd avant d’exécuter rails ne résout pas le problème.
Merci pour votre réponse. Je constate que le comportement de Rails avec docker exec est également très étrange. Manuellement, cela fonctionne parfaitement :
C’est normal ; vous demandez à Docker d’exécuter le binaire /usr/local/bin/rails console dans le conteneur. Autrement dit, un fichier unique contenant un espace intégré. Ce fichier n’existe pas.
Considérez l’exemple suivant :
○ → docker run -i debian /bin/echo hello
hello
○ → docker run -i debian '/bin/echo hello'
docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "/bin/echo hello": stat /bin/echo hello: no such file or directory: unknown.
ERRO[0000] error waiting for container: context canceled
Citez la commande de la même manière que si vous l’exécutiez à l’intérieur du conteneur :