defmodule Phoenix do @moduledoc """ This is the documentation for the Phoenix project. To get started, see our [overview guides](overview.html). """ use Application @doc false def start(_type, _args) do # Warm up caches _ = Phoenix.Template.engines() _ = Phoenix.Template.format_encoder("index.html") warn_on_missing_json_library() # Configure proper system flags from Phoenix only if stacktrace_depth = Application.get_env(:phoenix, :stacktrace_depth) do :erlang.system_flag(:backtrace_depth, stacktrace_depth) end if Application.fetch_env!(:phoenix, :logger) do Phoenix.Logger.install() end children = [ # Code reloading must be serial across all Phoenix apps Phoenix.CodeReloader.Server, {DynamicSupervisor, name: Phoenix.Transports.LongPoll.Supervisor, strategy: :one_for_one} ] Supervisor.start_link(children, strategy: :one_for_one, name: Phoenix.Supervisor) end @doc """ Returns the configured JSON encoding library for Phoenix. To customize the JSON library, including the following in your `config/config.exs`: config :phoenix, :json_library, AlternativeJsonLibrary """ def json_library do Application.get_env(:phoenix, :json_library, Jason) end @doc """ Returns the `:plug_init_mode` that controls when plugs are initialized. We recommend to set it to `:runtime` in development for compilation time improvements. It must be `:compile` in production (the default). This option is passed as the `:init_mode` to `Plug.Builder.compile/3`. """ def plug_init_mode do Application.get_env(:phoenix, :plug_init_mode, :compile) end defp warn_on_missing_json_library do configured_lib = Application.get_env(:phoenix, :json_library) if configured_lib && not Code.ensure_loaded?(configured_lib) do IO.warn """ found #{inspect(configured_lib)} in your application configuration for Phoenix JSON encoding, but module #{inspect(configured_lib)} is not available. Ensure #{inspect(configured_lib)} is listed as a dependency in mix.exs. """ end end end