Packages
phoenix_kit
1.7.178
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/phoenix_kit/supervisor.ex
defmodule PhoenixKit.Supervisor do
@moduledoc """
Supervisor for all PhoenixKit workers.
"""
use Supervisor
alias PhoenixKit.Modules.Languages
def start_link(init_arg) do
Supervisor.start_link(__MODULE__, init_arg, name: __MODULE__)
end
@impl true
def init(_init_arg) do
update_mode = Application.get_env(:phoenix_kit, :update_mode, false)
children = build_children(update_mode)
Supervisor.init(children, strategy: :one_for_one)
end
# Minimal set of children needed when running mix phoenix_kit.update.
# Skips Dashboard.Registry, OAuthConfigLoader, module workers, and presence
# so the update task only needs 1-2 DB connections for migrations.
# Settings cache starts with NO warmer — all Settings functions return nil/%{}
# in update_mode anyway, so warming would just spam warnings every 10 s.
defp build_children(true = _update_mode) do
[
PhoenixKit.PubSub.Manager,
{PhoenixKit.Cache.Registry, []},
PhoenixKit.ModuleRegistry,
Supervisor.child_spec(
{PhoenixKit.Cache, name: :settings},
id: :settings_cache
),
PhoenixKit.Users.RateLimiter.Backend
]
end
# Full set of children for normal application operation.
defp build_children(false = _update_mode) do
[
PhoenixKit.PubSub.Manager,
PhoenixKit.Admin.SimplePresence,
{PhoenixKit.Cache.Registry, []},
# Module registry — must start before Dashboard.Registry so module tabs are available
PhoenixKit.ModuleRegistry,
# Settings cache starts BEFORE Dashboard.Registry so enabled?/0 calls hit the cache
# instead of making individual DB queries per module at startup.
Supervisor.child_spec(
{PhoenixKit.Cache,
name: :settings, sync_init: true, warmer: &PhoenixKit.Settings.warm_cache_data/0},
id: :settings_cache
),
# Dashboard tab registry for user dashboard navigation.
# Starts after settings_cache so module enabled? checks hit cache rather than DB.
PhoenixKit.Dashboard.Registry,
# Normalize legacy admin_languages setting into unified languages_config
# Runs once after settings cache is warmed; idempotent no-op if already migrated
Supervisor.child_spec(
{Task,
fn ->
try do
Languages.normalize_language_settings()
rescue
error ->
require Logger
Logger.error(
"[PhoenixKit] Failed to normalize language settings at startup: #{inspect(error)}"
)
end
end},
id: :normalize_languages
),
# Rate limiter backend MUST be started before any authentication requests
PhoenixKit.Users.RateLimiter.Backend,
# Task supervisor for fire-and-forget background work (e.g. stale fixer)
{Task.Supervisor, name: PhoenixKit.TaskSupervisor},
# OAuth config loader - now guaranteed to have critical settings in cache
PhoenixKit.Workers.OAuthConfigLoader
] ++
PhoenixKit.ModuleRegistry.static_children()
end
end