cjbottaro
Mix task to start only certain applications?
I have an umbrella project that has lots of Phoenix apps, background workers, etc. Releases work great for deployment when you only want to start certain applications, but what about local dev using mix?
Given an umbrella like:
umbrella
apps
foo
foo_web
foo_worker
I’d like say something like iex -S mix app.start foo and it not startup the foo_web and foo_worker apps.
I made my own custom mix task for this, but it requires compiling my app first, which is a bit wonky since most people I know just do mix deps.get; iex -S mix and let the compile happen implicitly. Also, would be better to use something built-in than something custom.
Thanks for the help!
Marked As Solved
shanesveller
I typically use mix cmd --app umbrella_child mix run or pushd/popd for that, together with Tmux splits/panes, which can optionally be automated with projects like tmuxinator, teamocil, or a recent entrant called dmux.
Our primary repository at work is a large umbrella where most development efforts target one web frontend plus data and batch processing, so around a quarter of the total repo footprint, and this model works well in that scenario.
Also Liked
hauleth
You can use:
$ mix run --no-start -e "{:ok, _} = Application.ensure_all_started(:foo)"
To start only one application. Just remember to add --no-halt if you run it outside of IEx.
shanesveller
pushd and popd are named after pushing and popping a stack from traditional computer science, so it looks something like:
# stores your current working directory
pushd apps/umbrella_child
# one-off commands, this approach doesn't work as well for something that stays running
mix ecto.migrate
# restores your working directory as it was prior to the previous pushd command
popd







