ich möchte automatisierte Aufgaben zur Bereinigung von Benutzern vom Host-Bash aus ausführen. Manuell führe ich folgendes aus:
/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)
Ich habe eine lange Liste von Benutzernamen aus einer Textdatei, die entfernt werden müssen. Die manuelle Ausführung ist nicht praktikabel. Ich habe versucht, den Löschbefehl in ein Bash-Skript zu verpacken. Bei der Ausführung von rails c mit dem Unterbefehl launcher app schlägt die Redis-Verbindung fehl:
/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.
Beim Vergleich der Umgebungen mit export zwischen launcher enter app und launcher run app sehen diese jedoch fast identisch aus. Was übersehe ich? launcher run startet in /, während launcher enter direkt in /var/www/discourse wechselt. Ein cd vor der Ausführung von rails hilft nicht.
Dies ist zu erwarten; Sie weisen Docker an, die Datei /usr/local/bin/rails console im Container auszuführen. Das heißt, eine einzelne Datei mit einem eingebetteten Leerzeichen. Diese Datei existiert nicht.
Betrachten Sie folgendes Beispiel:
○ → 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
Quoten Sie den Befehl genauso, als würden Sie ihn innerhalb des Containers ausführen: