From 448d739b259b3fe2e7c6ff2d2f41b93d53dd01b3 Mon Sep 17 00:00:00 2001 From: rinpatch Date: Tue, 18 Jun 2019 00:17:47 +0300 Subject: [PATCH] pleroma_ctl: Run mix tasks using rpc instead of eval This patch changes pleroma_ctl to call into a running instance instead of spinning up a new one for mix task execution. This significantly decreases the time needed for mix task execution (on my machine for `pleroma_ctl user set rin --no-admin` the difference is 0.2s vs 4.2s) and allows mix tasks to affect the instance context, for example, this allows to clear the cache after user deletion --- rel/pleroma_ctl | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/rel/pleroma_ctl b/rel/pleroma_ctl index 2e709a8a6..ac7339762 100755 --- a/rel/pleroma_ctl +++ b/rel/pleroma_ctl @@ -1,7 +1,7 @@ #!/bin/sh # XXX: This should be removed when elixir's releases get custom command support if [ -z "$1" ] || [ "$1" = "help" ]; then - echo "Usage: $(basename "$0") COMMAND [ARGS] + echo "Usage: $(basename "$0") COMMAND [ARGS] The known commands are: @@ -11,9 +11,16 @@ if [ -z "$1" ] || [ "$1" = "help" ]; then and any mix tasks under Pleroma namespace, for example \`mix pleroma.user COMMAND\` is equivalent to \`$(basename "$0") user COMMAND\` + + By default pleroma_ctl will try calling into a running instance to execute non migration-related commands, + if for some reason this is undesired, set PLEROMA_CTL_RPC_DISABLED environment variable " else - SCRIPT=$(readlink -f "$0") - SCRIPTPATH=$(dirname "$SCRIPT") - "$SCRIPTPATH"/pleroma eval 'Pleroma.ReleaseTasks.run("'"$*"'")' + SCRIPT=$(readlink -f "$0") + SCRIPTPATH=$(dirname "$SCRIPT") + if [ "$1" = "migrate" ] || [ "$1" = "rollback" ] || [ "$1" = "create" ] || [ -n "$PLEROMA_CTL_RPC_DISABLED" ]; then + "$SCRIPTPATH"/pleroma eval 'Pleroma.ReleaseTasks.run("'"$*"'")' + else + "$SCRIPTPATH"/pleroma rpc 'Pleroma.ReleaseTasks.run("'"$*"'")' + fi fi