I’m really interested in the BeaconCMS project but it requires using an umbrella app. I’ve used an umbrella fairly recently and found it a little too cumbersome. I much prefer the Phoenix mono app happy path
I was wondering if anyone knew why BeaconCMS was built as an umbrella? What is the reasoning for making that decision? What benefits do we gain?
There are some other elixir based CMS’ that aren’t umbrellas so I’m wondering what’s the difference?
I did try to setup BeaconCMS earlier but the need to customize the umbrella along with thinking about deploying an umbrella stopped me after +20 min of customization. I also have not used any other elixir cms so if anyone has some thoughts I’d greatly appreciate it.
What’s cumbersome about umbrella apps? On deploy, it’s a single runtime/image the same as a normal release, and IME there is little enough overhead about managing the separate
That said, it looks like the instructions were given the way that they were because:
- Beacon is not yet on hex.pm, for better or worse. That to me, indicates that it is considered pre-alpha (even if it’s high quality).
- This is probably how Dockyard deploys Beacon at the moment.
Based on the instructions, however, I don’t see anything in there which would preclude using Beacon in a non-umbrella application. But I don’t know that it would be considered the “happy” path if you run into issues using Beacon.
The benefits are the same benefits of building an umbrella app in the first place. Could we have done it a different way? Sure.
I was curious and tried to set up in a non-umbrella application, a bit annoying right now because you can’t simply copy paste to see what it is like, but as far as my tests went (a couple hours playing with it) there’s nothing that makes it impossible to use it with a monolithic application.
Beacon CMS does not require an Umbrella. For a non-umbrella, I believe the only two differences in the walkthrough are 1) adding dependencies happens in one mix.exs instead of two and 2) you don’t have to cd before the
mix ecto.reset call. Neither of these steps are Beacon specific.