Allow bypassing app router with FARSIDE_NO_ROUTER

Setting the aforementioned env var skips creation of the app router,
which is useful for running update.exs when the main app is already
running (otherwise there's a port conflict).
This commit is contained in:
Ben Busby 2021-11-15 20:09:34 -07:00
parent 5904c7cce4
commit d4581797e7
No known key found for this signature in database
GPG key ID: 339B7B7EB5333D14
4 changed files with 22 additions and 4 deletions

View file

@ -73,3 +73,9 @@ request per second per IP.
- Run Farside: `mix run --no-halt`
- Uses localhost:4001
### Environment Variables
| Name | Purpose |
| -- | -- |
| FARSIDE_TEST | If enabled, skips the instance availability check in `update.exs`. |
| FARSIDE_NO_ROUTER | If enabled, skips creation of the router. Useful for running `update.exs` with `mix run` when the app is already running. |

View file

@ -1,6 +1,7 @@
import Config
config :farside,
port: 4001,
redis_conn: "redis://localhost:6379",
update_file: ".update-results",
service_prefix: "service-",

View file

@ -1,4 +1,5 @@
defmodule Farside.Application do
@farside_port Application.fetch_env!(:farside, :port)
@redis_conn Application.fetch_env!(:farside, :redis_conn)
@moduledoc false
@ -6,12 +7,22 @@ defmodule Farside.Application do
@impl true
def start(_type, _args) do
children = [
Plug.Cowboy.child_spec(scheme: :http, plug: Farside.Router, options: [port: 4001]),
{Redix, {@redis_conn, [name: :redix]}},
plug_children = [
Plug.Cowboy.child_spec(
scheme: :http,
plug: Farside.Router,
options: [
port: @farside_port
]
),
{PlugAttack.Storage.Ets, name: Farside.Throttle.Storage, clean_period: 60_000}
]
children = [
{Redix, {@redis_conn, [name: :redix]}} |
System.get_env("FARSIDE_NO_ROUTER") && [] || plug_children
]
opts = [strategy: :one_for_one, name: Farside.Supervisor]
Supervisor.start_link(children, opts)
end

View file

@ -3,4 +3,4 @@
SCRIPT_DIR="$(builtin cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
cd "$SCRIPT_DIR"
mix run update.exs
FARSIDE_NO_ROUTER=1 mix run update.exs