pleroma_ctl: Run mix tasks using rpc instead of eval
authorrinpatch <rinpatch@sdf.org>
Mon, 17 Jun 2019 21:17:47 +0000 (00:17 +0300)
committerrinpatch <rinpatch@sdf.org>
Mon, 17 Jun 2019 21:22:58 +0000 (00:22 +0300)
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

index 2e709a8a67c34ecc3e855d2ec37fb1420dbffc05..ac7339762dbbe463f13de05e70ae4f79ead7e79f 100755 (executable)
@@ -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