forked from AkkomaGang/akkoma
Fix supervisor order
This starts `Pleroma.Web.Endpoint` after all other processes and may avoid some weird bugs (especially at start/restart). Also properly ignores starting the gopher's gen_server if disabled.
This commit is contained in:
parent
52ce368562
commit
1d94c8f0f0
2 changed files with 41 additions and 34 deletions
|
@ -1,5 +1,6 @@
|
||||||
defmodule Pleroma.Application do
|
defmodule Pleroma.Application do
|
||||||
use Application
|
use Application
|
||||||
|
import Supervisor.Spec
|
||||||
|
|
||||||
@name "Pleroma"
|
@name "Pleroma"
|
||||||
@version Mix.Project.config()[:version]
|
@version Mix.Project.config()[:version]
|
||||||
|
@ -11,7 +12,6 @@ def named_version(), do: @name <> " " <> @version
|
||||||
# for more information on OTP Applications
|
# for more information on OTP Applications
|
||||||
@env Mix.env()
|
@env Mix.env()
|
||||||
def start(_type, _args) do
|
def start(_type, _args) do
|
||||||
import Supervisor.Spec
|
|
||||||
import Cachex.Spec
|
import Cachex.Spec
|
||||||
|
|
||||||
# Define workers and child supervisors to be supervised
|
# Define workers and child supervisors to be supervised
|
||||||
|
@ -20,10 +20,6 @@ def start(_type, _args) do
|
||||||
# Start the Ecto repository
|
# Start the Ecto repository
|
||||||
supervisor(Pleroma.Repo, []),
|
supervisor(Pleroma.Repo, []),
|
||||||
worker(Pleroma.Emoji, []),
|
worker(Pleroma.Emoji, []),
|
||||||
# Start the endpoint when the application starts
|
|
||||||
supervisor(Pleroma.Web.Endpoint, []),
|
|
||||||
# Start your own worker by calling: Pleroma.Worker.start_link(arg1, arg2, arg3)
|
|
||||||
# worker(Pleroma.Worker, [arg1, arg2, arg3]),
|
|
||||||
worker(
|
worker(
|
||||||
Cachex,
|
Cachex,
|
||||||
[
|
[
|
||||||
|
@ -63,20 +59,17 @@ def start(_type, _args) do
|
||||||
],
|
],
|
||||||
id: :cachex_idem
|
id: :cachex_idem
|
||||||
),
|
),
|
||||||
worker(Pleroma.Web.Federator, []),
|
|
||||||
worker(Pleroma.Web.Federator.RetryQueue, []),
|
worker(Pleroma.Web.Federator.RetryQueue, []),
|
||||||
worker(Pleroma.Gopher.Server, []),
|
worker(Pleroma.Web.Federator, []),
|
||||||
worker(Pleroma.Stats, [])
|
worker(Pleroma.Stats, [])
|
||||||
] ++
|
] ++
|
||||||
if @env == :test,
|
streamer_child() ++
|
||||||
do: [],
|
chat_child() ++
|
||||||
else:
|
[
|
||||||
[worker(Pleroma.Web.Streamer, [])] ++
|
# Start the endpoint when the application starts
|
||||||
if(
|
supervisor(Pleroma.Web.Endpoint, []),
|
||||||
!chat_enabled(),
|
worker(Pleroma.Gopher.Server, [])
|
||||||
do: [],
|
]
|
||||||
else: [worker(Pleroma.Web.ChatChannel.ChatChannelState, [])]
|
|
||||||
)
|
|
||||||
|
|
||||||
# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
|
# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
|
||||||
# for other strategies and supported options
|
# for other strategies and supported options
|
||||||
|
@ -84,7 +77,20 @@ def start(_type, _args) do
|
||||||
Supervisor.start_link(children, opts)
|
Supervisor.start_link(children, opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp chat_enabled do
|
if Mix.env() == :test do
|
||||||
Application.get_env(:pleroma, :chat, []) |> Keyword.get(:enabled)
|
defp streamer_child(), do: []
|
||||||
|
defp chat_child(), do: []
|
||||||
|
else
|
||||||
|
defp streamer_child() do
|
||||||
|
[worker(Pleroma.Web.Streamer, [])]
|
||||||
|
end
|
||||||
|
|
||||||
|
defp chat_child() do
|
||||||
|
if Pleroma.Config.get([:chat, :enabled]) do
|
||||||
|
[worker(Pleroma.Web.ChatChannel.ChatChannelState, [])]
|
||||||
|
else
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,27 +6,28 @@ def start_link() do
|
||||||
config = Pleroma.Config.get(:gopher, [])
|
config = Pleroma.Config.get(:gopher, [])
|
||||||
ip = Keyword.get(config, :ip, {0, 0, 0, 0})
|
ip = Keyword.get(config, :ip, {0, 0, 0, 0})
|
||||||
port = Keyword.get(config, :port, 1234)
|
port = Keyword.get(config, :port, 1234)
|
||||||
GenServer.start_link(__MODULE__, [ip, port], [])
|
|
||||||
|
if Keyword.get(config, :enabled, false) do
|
||||||
|
GenServer.start_link(__MODULE__, [ip, port], [])
|
||||||
|
else
|
||||||
|
Logger.info("Gopher server disabled")
|
||||||
|
:ignore
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def init([ip, port]) do
|
def init([ip, port]) do
|
||||||
if Pleroma.Config.get([:gopher, :enabled], false) do
|
Logger.info("Starting gopher server on #{port}")
|
||||||
Logger.info("Starting gopher server on #{port}")
|
|
||||||
|
|
||||||
:ranch.start_listener(
|
:ranch.start_listener(
|
||||||
:gopher,
|
:gopher,
|
||||||
100,
|
100,
|
||||||
:ranch_tcp,
|
:ranch_tcp,
|
||||||
[port: port],
|
[port: port],
|
||||||
__MODULE__.ProtocolHandler,
|
__MODULE__.ProtocolHandler,
|
||||||
[]
|
[]
|
||||||
)
|
)
|
||||||
|
|
||||||
{:ok, %{ip: ip, port: port}}
|
{:ok, %{ip: ip, port: port}}
|
||||||
else
|
|
||||||
Logger.info("Gopher server disabled")
|
|
||||||
{:ok, nil}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue