Search code examples
ruby-on-railsmulti-tenantapartment-gem

Rails : Multi-tenancy using Apartment and MySQL


I'm creating an application (on rails 6.0.1) using the Apartment gem & Devise, but i can't figure out how to make it work using MySQL..

I've made all my config and stuff, generating my User devise model etc. but when i'm trying to rails db:migrate an error occurs :

Migrating  tenant
Error while connecting to tenant : Mysql2::Error: No database selected

Meaning i havent configured Apartment correctly to work with my Mysql database right? I couldn't find any informations (that i can understand in beginner terms) on how to connect it correctly. My database.yml has the following :

// database.yml

default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: myusername
  password: mypassword
  socket: /tmp/mysql.sock

(...)

Note that i have the good username and password in my rails app :) Everything worked fine until i've tried to create the multitenancy stuff. Meaning the issue is maybe coming from my config/initializers/apartment.rb file?

Here is what it looks like right now

// config/initializers/apartment.rb
require 'apartment/elevators/subdomain'
Apartment.configure do |config|
  config.excluded_models = %w[User]
  config.tenant_names = -> { User.pluck :subdomain }
  config.use_schemas = true
end

Rails.application.config.middleware.use Apartment::Elevators::Subdomain

Edit : I'm using the development branch from Apartment. Maybe it's an issue with Rails 6?

// Gemfile

gem 'apartment', github: 'influitive/apartment', branch: 'development'

Solution

  • I guess by now you solved your problem but for those who came here searching to deal with multi tenancy in Rails 6. A couple of things I found by myself: