don't fully start pleroma in mix tasks
authorAlexander Strizhakov <alex.strizhakov@gmail.com>
Fri, 3 Jul 2020 16:18:08 +0000 (19:18 +0300)
committerAlexander Strizhakov <alex.strizhakov@gmail.com>
Wed, 8 Jul 2020 12:58:47 +0000 (15:58 +0300)
lib/mix/pleroma.ex
lib/mix/tasks/pleroma/digest.ex
lib/mix/tasks/pleroma/email.ex
lib/mix/tasks/pleroma/relay.ex
lib/pleroma/application.ex

index 3ad6edbfbb659d5830d4abb2ce83d0e82b038b16..553c74c25caab3c39ec9e90b110aaee2e62b7c81 100644 (file)
@@ -3,6 +3,8 @@
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Mix.Pleroma do
+  @apps [:restarter, :ecto, :ecto_sql, :postgrex, :db_connection, :cachex]
+  @cachex_childs ["object", "user"]
   @doc "Common functions to be reused in mix tasks"
   def start_pleroma do
     Application.put_env(:phoenix, :serve_endpoints, false, persistent: true)
@@ -11,7 +13,23 @@ defmodule Mix.Pleroma do
       Application.put_env(:logger, :console, level: :debug)
     end
 
-    {:ok, _} = Application.ensure_all_started(:pleroma)
+    apps =
+      if Application.get_env(:tesla, :adapter) == Tesla.Adapter.Gun do
+        [:gun | @apps]
+      else
+        [:hackney | @apps]
+      end
+
+    Enum.each(apps, &Application.ensure_all_started/1)
+
+    childs = [Pleroma.Repo, Pleroma.Config.TransferTask, Pleroma.Web.Endpoint]
+
+    cachex_childs = Enum.map(@cachex_childs, &Pleroma.Application.build_cachex(&1, []))
+
+    Supervisor.start_link(childs ++ cachex_childs,
+      strategy: :one_for_one,
+      name: Pleroma.Supervisor
+    )
 
     if Pleroma.Config.get(:env) not in [:test, :benchmark] do
       pleroma_rebooted?()
index 3595f912d622ab0dd54de666adb7a4ddad553d08..8bde2d4f290bdd848db42a14302a90bf11c4fcdb 100644 (file)
@@ -7,6 +7,8 @@ defmodule Mix.Tasks.Pleroma.Digest do
 
   def run(["test", nickname | opts]) do
     Mix.Pleroma.start_pleroma()
+    Application.ensure_all_started(:timex)
+    Application.ensure_all_started(:swoosh)
 
     user = Pleroma.User.get_by_nickname(nickname)
 
index d3fac6ec8f3420da3ec0b765932b49ba432f42e6..16fe314313f7513efcb854e59202e92732268c9a 100644 (file)
@@ -7,6 +7,7 @@ defmodule Mix.Tasks.Pleroma.Email do
 
   def run(["test" | args]) do
     Mix.Pleroma.start_pleroma()
+    Application.ensure_all_started(:swoosh)
 
     {options, [], []} =
       OptionParser.parse(
index c3312507e93786dcbebe0194177d84f9fc112c38..b67d256c3278a2780564df3c8cc28562e6cb346a 100644 (file)
@@ -12,6 +12,7 @@ defmodule Mix.Tasks.Pleroma.Relay do
 
   def run(["follow", target]) do
     start_pleroma()
+    Application.ensure_all_started(:flake_id)
 
     with {:ok, _activity} <- Relay.follow(target) do
       # put this task to sleep to allow the genserver to push out the messages
@@ -23,6 +24,7 @@ defmodule Mix.Tasks.Pleroma.Relay do
 
   def run(["unfollow", target]) do
     start_pleroma()
+    Application.ensure_all_started(:flake_id)
 
     with {:ok, _activity} <- Relay.unfollow(target) do
       # put this task to sleep to allow the genserver to push out the messages
@@ -34,6 +36,7 @@ defmodule Mix.Tasks.Pleroma.Relay do
 
   def run(["list"]) do
     start_pleroma()
+    Application.ensure_all_started(:flake_id)
 
     with {:ok, list} <- Relay.list(true) do
       list |> Enum.each(&shell_info(&1))
index 9615af1229a9541bac56506a19ba63f5e59bd23a..7eb629abfc723eeb164e8cf408c86752b6a87b25 100644 (file)
@@ -162,7 +162,8 @@ defmodule Pleroma.Application do
   defp seconds_valid_interval,
     do: :timer.seconds(Config.get!([Pleroma.Captcha, :seconds_valid]))
 
-  defp build_cachex(type, opts),
+  @spec build_cachex(String.t(), keyword()) :: map()
+  def build_cachex(type, opts),
     do: %{
       id: String.to_atom("cachex_" <> type),
       start: {Cachex, :start_link, [String.to_atom(type <> "_cache"), opts]},