I'm curious about if I can have a feature like Elixir/Phoenix umbrella project when using Ruby On Rails

Following on an old discussion I started on Elixir Forum here, I finally made my mind to learn Ruby on Rails in addition to Elixir/Phoenix. The thread is visible only for Elixir Forum members.

One of the things that makes me going for that choice is that even if Ruby is not Elixir, the syntax seems a bit familiar to me at a quick glance. So I think my learning would be somehow fast.

But I really appreciate Elixir umbrella feature and after some googling I’m not finding anything similar for Ruby. So I would like to know if there is at least a way when working with Rails to have multiple web apps in the same project but into different folders (separated controllers, views, templates , assets) but still sharing for example some core “context modules”.

Thanks

2 Likes

I don’t think there is anything exactly like Umbrellas, but there are some architectural styles in Rails land that might be of interest to you, like this one:

The Modular Monolith

Here’s how we do it.

  • We don’t have an app/ directory in our Rails project. All of our code is either in gems/ or engines/.
  • Gems contain Ruby code that does not depend on Rails. We use ActiveSupport, but we do not use ActiveRecord or ActionPack. The gems are all stateless.
  • Engines contain Ruby code that does depend on Rails. Persistence happens at this layer through ActiveRecord. API and Web interfaces are exposed at this layer through ActionPack.

https://medium.com/@dan_manges/the-modular-monolith-rails-architecture-fb1023826fc4

2 Likes

Thanks @AstonJ !
At this moment it seems a bit complex for me but I felt the same with elixir Umbrella when started Elixir some time ago. I think once I will get more familiar with the basics I can go on the path suggested on the blog post. I just wanted to be sure there are such solutions before starting my new journey. ^^

2 Likes

Is there any particular reason why you want to do it?

Something I do with almost all of my Rails apps (thanks to a tip from Yehuda Katz) is to create a classes folder in my app directory and this is where all my non-Rails functionality lives - you may find this is sufficient :smiley:

2 Likes

It’s just that I’m a bit obsessed with tidying up things. :sweat_smile:
I like to see a clear separation between a project modules according to their function. This way I can for example take a folder and know that everything related to the administration interface is there and reuse it in another project.

2 Likes

A gem or engine sounds like what you want (if you want ‘everything’ related to it packaged in one place). Although not quite the same, namespacing may be worth a look:

2 Likes

I know this question is a bit old now but the hanami framework architecture might be just what you want.
As a bonus hanami nicely integrates with some dry-rb.org gems which in my opinion are some of the coolest things happening on ruby right now.

2 Likes

Dry-rb looks super interesting Cassio! I’d like to see some books on modern Ruby development (maybe it’s something @PragmaticBookshelf might do!)

It was only recently that I discovered Ruby has Structs - I’m pretty sure none of my books mentioned them when I was learning Ruby.

I reckon we should start a thread about Dry-rb/Modern Ruby - I’m sure plenty of people will be interested in what’s happening in the Ruby world atm - including me! :nerd_face:

1 Like

Thanks for the feedback. ^^

In the Elixir forum discussion, someone had also suggested the Hanami framework to me and after a quick overview, it seemed really tempting to me then.

My only concern is that I don’t want to roll my own implementation for things such as Authentication, Administration, files Uploads/Downloads management… All that things that are highly maintained and ready to be used in the most popular web frameworks. I have already to deal with such concern with Elixir/Phoenix which I love but unfortunately I had to change several times a library by another (or rolled my own) because the first is no longer maintained. That is also why I deciced in the first place to learn a second web framework that I can use for case I want to go really fast and fully rely on production ready libraries for much eveything.

So if I can use most of the rails gems or have their alternatives with Hanami, it would be really great. I really like the feeling I have from an overview of the framework. ^^

2 Likes

Well, regarding file uploads you can use shrine which is really well desgined and have a thin wrapper for hanami (https://github.com/katafrakt/hanami-shrine)

For authentication there is the awesome (as any thing by jeremy evans) rodauth .
This blog post shows a bit of its capabilities.

Unfortunately I cant really point you to any admin panel.

Rails is still awesome for a quick and dirty mvp, but I have been bitten so many times by devise, or autoloading issues, or active support black magic that I prefer to have a bit slower start using something “simpler” like hanami or even go straight to sinatra/roda/hanami-router

3 Likes