One of the most confusing topics when it comes to building Mix projects and
releases is in figuring out the list of applications. The workflow for
adding a dependency usually requires adding the dependency to the list of
deps and then adding its application to the list of applications.

Since this was a common source of confusion, we wrote a blog post
discussing the common scenarios and rationale:
http://blog.plataformatec.com.br/2016/07/understanding-deps-and-applications-in-your-mixfile/

However, I believe we should still attempt to simplify this workflow. This
is such a proposal.

The idea is to automatically inflect the list of applications by including
all dependencies that are required in production. Overall, we will have:

def application do

  [otp_applications: [:logger],

   skipped_applications: [...],

   included_applications: [...]]

end


If the :applications key is is not provided, we will automatically inflect
it by calculating:

applications = ((all_apps_for_prod_deps ++ otp_applications) --
included_applications) -- skipped_applications


   - otp_applications - lists applications that come from erlang or elixir
   - skipped_applications - dependencies that are listed in production but
   you want to skip during releases (mutually exclusive with :applications)
   - included_applications - same meaning as today. applications you want
   to include in production but not start them


I expect for the majority of cases developers won't need to pass the
skipped_applications and included_applications flags, so we can skip them
in generated templates. At the end, new apps will have only the following:


def application do
  # List only applications from Elixir and Erlang required in prod

  [otp_applications: [:logger]]

end


Thoughts?

*José Valim*
www.plataformatec.com.br
Skype: jv.ptec
Founder and Director of R&D

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4LWOsR5xiND%3D-Ty_NcFmFj3VfPstVs1mxTiTsbrf6g64Q%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to