Make the application multi-tenant

This commit is contained in:
Mike Dalessio
2025-03-04 08:45:41 -05:00
parent b90cc9bd06
commit d9ece38753
8 changed files with 2024 additions and 9 deletions
+1 -1
View File
@@ -2,7 +2,7 @@ module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
tenanted_connection do
set_current_user || reject_unauthorized_connection
end
+1
View File
@@ -1,3 +1,4 @@
class ApplicationRecord < ActiveRecord::Base
primary_abstract_class
tenanted
end
+1 -2
View File
@@ -1,6 +1,5 @@
#!/usr/bin/env sh
echo "Starting Fizzy on http://localhost:3006"
echo "Login with david@37signals.com using secret123456"
echo "Starting Fizzy on http://development-tenant.fizzy.localhost:3006"
SOLID_QUEUE_IN_PUMA=true exec ./bin/rails server -p 3006
+6 -3
View File
@@ -12,7 +12,8 @@ default: &default
development:
primary:
<<: *default
database: storage/development.sqlite3
database: storage/development-tenanted/%{tenant}/main.sqlite3
tenanted: true
cable:
<<: *default
database: storage/development_cable.sqlite3
@@ -31,12 +32,14 @@ development:
# Do not set this db to the same as development or production.
test:
<<: *default
database: storage/test.sqlite3
database: storage/test-tenanted/%{tenant}/main.sqlite3
tenanted: true
production:
primary:
<<: *default
database: storage/production.sqlite3
database: storage/production-tenanted/%{tenant}/main.sqlite3
tenanted: true
cable:
<<: *default
database: storage/production_cable.sqlite3
+3
View File
@@ -0,0 +1,3 @@
Rails.application.configure do |config|
config.middleware.use ActiveRecord::Tenanted::TenantSelector, "ApplicationRecord", ->(request) { request.subdomain }
end
+4 -2
View File
@@ -1,10 +1,12 @@
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>
root: <%= Rails.root.join("tmp/storage/%{tenant}") %>
tenanted: true
local:
service: Disk
root: <%= Rails.root.join("storage", "files") %>
root: <%= Rails.root.join("storage", "files", "%{tenant}") %>
tenanted: true
# Use bin/rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
# amazon:
+2007
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -11,7 +11,7 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest
end
assert_response :success
assert_equal ActiveStorage::Attachment.last.slug_url(host: "www.example.com", port: nil), response.parsed_body["fileUrl"]
assert_equal ActiveStorage::Attachment.last.slug_url(host: "#{ApplicationRecord.current_tenant}.example.com", port: nil), response.parsed_body["fileUrl"]
assert_equal "image/jpeg", response.parsed_body["mimetype"]
assert_equal "moon.jpg", response.parsed_body["fileName"]
end