gjaldon / heroku-buildpack-phoenix-static

A Heroku buildpack for building Phoenix's static assets
MIT License
229 stars 224 forks source link

Support for multiple phoenix applications under an Umbrella App #44

Open andrewvy opened 7 years ago

andrewvy commented 7 years ago

So, I run multiple phoenix applications and each have their own assets.

To get around cd'ing into all the different applications and running the npm deploy script in each..

I just have a custom compile script that looks like this:

cd $build_dir
mix cmd "npm install || true"
mix cmd "npm run deploy || true"
mix phoenix.digest

You can run mix cmd which will run the command in each of all the child applications.

mix phoenix.digest also does run in all of the phoenix applications as well.

I feel like you can use these same commands in a single application, and even in umbrella applications.

joshprice commented 7 years ago

We ended up using something like this where we had multiple Phoenix apps with assets but with a router which didn't have any assets. The router failed to mix ph[oeni]x when priv/static did not exist so we ended up with this solution.

This approach can support Phoenix 1.2 or 1.3 apps. Use yarn by ensuring there is a yarn.lock file in each assets directory.

cd $build_dir

# Phoenix 1.2
mix cmd --app app_a "(yarn install && yarn run deploy) || true"
mix cmd --app app_a mix phoenix.digest

# Phoenix 1.3
mix cmd --app app_b "(cd assets && yarn install && yarn run deploy) || true"
mix cmd --app app_b mix phx.digest

/cc @jonrowe

joshprice commented 7 years ago

Since this seems to be the simplest way to achieve this, it'd be nice to add some instructions to the README

edouardmenayde commented 5 years ago

What is the status on this ? I would be willing to make this feature happen but I'm not sure where I should start. Any idea ?

JonRowe commented 5 years ago

A couple of things need to happen,phx.digest needs to not error in an umbrella context if theres no assets folder, a task needs to be able to exist for installing assets that runs across the umbrella.

axelson commented 4 years ago

Specifically the install_and_cache_deps() in build.sh also needs to either support multiple assets directories or have a means to be easily disabled: https://github.com/gjaldon/heroku-buildpack-phoenix-static/blob/fa862491d793c4ccb934caa04a8688b92fe0572e/lib/build.sh#L117