56 lines
1.4 KiB
Elixir
56 lines
1.4 KiB
Elixir
|
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
|