defmodule Mix.Tasks.Phx.Server do
use Mix.Task
@shortdoc "Starts applications and their servers"
@moduledoc """
Starts the application by configuring all endpoints servers to run.
Note: to start the endpoint without using this mix task you must set
`server: true` in your `Phoenix.Endpoint` configuration.
## Command line options
* `--open` - open browser window for each started endpoint
Furthermore, this task accepts the same command-line options as
`mix run`.
For example, to run `phx.server` without recompiling:
$ mix phx.server --no-compile
The `--no-halt` flag is automatically added.
Note that the `--no-deps-check` flag cannot be used this way,
because Mix needs to check dependencies to find `phx.server`.
To run `phx.server` without checking dependencies, you can run:
$ mix do deps.loadpaths --no-deps-check, phx.server
"""
@impl true
def run(args) do
Application.put_env(:phoenix, :serve_endpoints, true, persistent: true)
Mix.Tasks.Run.run(open_args(args) ++ run_args())
end
defp iex_running? do
Code.ensure_loaded?(IEx) and IEx.started?()
end
defp open_args(args) do
if "--open" in args do
Application.put_env(:phoenix, :browser_open, true)
args -- ["--open"]
else
args
end
end
defp run_args do
if iex_running?(), do: [], else: ["--no-halt"]
end
end