URL Based multi tenancy
I'm new to Ruby on Rails, trying my best to catch up. for example... i've a domain and a username append to it, www.domain.com/samsoft, how can i achieve this and also routing? sample code will be appreciated. Thanks
Hey! Are you looking to do multi-tenancy based upon domain? If so the apartment gem is what you'll want. It can separate the database out by domain and provides some helpers for that. https://github.com/influitive/apartment
I did an episode on the Apartment gem using subdomains but you can modify that to use domains instead of subdomains. https://gorails.com/episodes/multitenancy-with-apartment
The readme for the gem shows all the relevant bits you'll need to change to support domains instead of subdomains.
As for making usernames at the root instead of on /users, you'll need to make a custom route.
resources :users get ":username", to: "users#show"
The second route will take the
/samsoft route and send it to the users show action. You'll need to make sure this route goes at the end of your routes file so that if you ever add something like
/help it wouldn't think that "help" was a username.
@ChrisOliver - would you still recommend using the apartment gem for domain based multi-tenancy today? Or are there better options out there?
@Howard OLeary, if you want schema based multitenancy, sure. It's still the best bet for that.
I more often do row-based multitenancy. That's what we do in the JumpstartRails.com template. The ActsAsTenant gem is pretty good for that.
@ChrisOliver - awesome, thanks so much for the swift reply. Should I be concerned that ActsAsTenant doesnt seem to be super actively maintained? Or is it stable enough for that to not be much of an issue?
It's pretty simple and the only things that would affect it are possibly major Rails versions, so there aren't many changes to be made to it.