Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rails Pacific - Multitenancy with Rails
Search
Ryan Bigg
October 25, 2014
Programming
0
280
Rails Pacific - Multitenancy with Rails
Covers the lessons learned about Multitenancy with Rails in the process of writing my book.
Ryan Bigg
October 25, 2014
Tweet
Share
More Decks by Ryan Bigg
See All by Ryan Bigg
Hiring Juniors - RubyConf Indonesia 2019 Closing Keynote
radar
1
430
Web Directions - Code Leaders - Hiring Juniors
radar
0
670
The Future of Rails - Take 2
radar
0
130
The Future of Rails
radar
1
130
Exploding Rails
radar
9
1.9k
Hiring Juniors
radar
2
460
The Perfect Coding Test
radar
0
130
Your First Developer Job
radar
1
110
Hiring Juniors
radar
2
280
Other Decks in Programming
See All in Programming
CSC307 Lecture 12
javiergs
PRO
0
450
オブザーバビリティ駆動開発って実際どうなの?
yohfee
1
510
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
1
270
2025年の活動の振り返り
hideg
0
120
米国のサイバーセキュリティタイムラインと見る Goの暗号パッケージの進化
tomtwinkle
1
200
日本だけで解禁されているアプリ起動の方法
ryunakayama
0
360
AI巻き込み型コードレビューのススメ
nealle
2
2.3k
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
130
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
310
Premier Disciplin for Micro Frontends Multi Version/ Framework Scenarios @OOP 2026, Munic
manfredsteyer
PRO
0
190
今更考える「単一責任原則」 / Thinking about the Single Responsibility Principle
tooppoo
2
940
個人開発は儲からない - それでも開発開始1ヶ月で300万円売り上げた方法
taishiyade
0
110
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
59
50k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
180
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
130
First, design no harm
axbom
PRO
2
1.1k
GitHub's CSS Performance
jonrohan
1032
470k
Building the Perfect Custom Keyboard
takai
2
700
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
63
53k
The SEO identity crisis: Don't let AI make you average
varn
0
400
GraphQLとの向き合い方2022年版
quramy
50
14k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
200
Crafting Experiences
bethany
1
65
Transcript
lifx.co
#21 Not #21
Multitenancy with Rails Ryan Bigg
None
None
Multitenancy?
None
None
None
Organization Team Repos
User Repos
None
…
DOGLIFEBETA! Garçon Fluffy Brutus “Like Facebook, but for dogs”
Multitenancy with Rails?
None
Is it… ✔ well maintained ✔ well documented ✔ clean
code
acts_as_tenant ✔ well documented
acts_as_tenant ✔ well maintained ✔ 140 commits, 19 contributors, low
issue count ✔ CI on Travis
acts_as_tenant ✔ clean code
acts_as_tenant
RequestStore.store
None
Thread.current Thread.current
apartment ✔ well documented ✔ well maintained ✔ clean code
“If you are using PostgreSQL, Apartment by default will set
up a new schema and migrate into there.”
“If you are using PostgreSQL, Apartment by default will set
up a new schema and migrate into there.”
None
“A database contains one or more named schemas, which in
turn contain tables.” “There are several reasons why one might want to use schemas: * To allow many users to use one database without interfering with each other.”
“To allow many users to use one database without interfering
with each other.”
ryanbigg=# SHOW search_path; search_path ---------------- "$user",public (1 row) "$user",public
fluffy.doglife.com garcon.doglife.com DOGLIFE BETA! brutus.doglife.com 1 2 3
(1.4ms) CREATE SCHEMA "garcon" <more tables go here>
None
None
None
DEPLOY IT!
Heroku Postgres
Backup time 24 hours
PostgreSQL is great
PostgreSQL with too many schemas
Part 2: Schema-less Multitenancy
Apartment
None
TEST ALL THE TIME
TEST ALL THE TIME?
TEST ALL THE TIME
Are you testing right now? No?
TEST ALL THE TIME OR ELSE
A codebase without tests
fluffy.doglife.com Fluffy’s Posts current_account = Fluffy @posts = current_account.posts fluffy.doglife.com/posts
Feature #1: Viewing Posts
A guest on Account A’s subdomain should only see Account
A’s posts Expected to not see “<Account B’s post>” Feature #1: Viewing Posts
Feature #1: Viewing Posts
Feature #1: Viewing Posts
Feature #1: Viewing Posts
A guest on Account A’s subdomain should only see Account
A’s posts Feature #1: Viewing Posts
fluffy.doglife.com Fluffy’s Posts current_account = Fluffy @posts = current_account.posts fluffy.doglife.com/posts
Feature #1: Viewing Posts
fluffy.doglife.com Fluffy’s Albums current_account = Fluffy @albums = current_account.albums fluffy.doglife.com/albums
Fluffy’s First Birthday Pictures @pictures = @album.pictures fluffy.doglife.com/albums/1/pictures Feature #2: Viewing Pictures
A guest on Account A’s subdomain should only see Account
A’s albums Expected to not see “<Account B’s album>” Feature #2: Viewing Pictures
Feature #2: Viewing Pictures
Feature #2: Viewing Pictures
A guest on Account A’s subdomain should only see Account
A’s albums Feature #2: Viewing Pictures
A guest on Account A’s subdomain viewing an album shows
pictures from that album Expected to not see “<Account B’s picture>” Feature #2: Viewing Pictures
Feature #2: Viewing Pictures
Feature #2: Viewing Pictures
A guest on Account A’s subdomain viewing an album shows
pictures from that album Feature #2: Viewing Pictures
fluffy.doglife.com Fluffy’s Albums current_account = Fluffy @albums = current_account.albums fluffy.doglife.com/albums
Fluffy’s First Birthday Pictures @pictures = @album.pictures fluffy.doglife.com/albums/1/pictures Feature #2: Viewing Pictures
Feature #2: Viewing Pictures
REGRESSION TEST ALL THE TIME
Feature #2: Viewing Pictures
None
Part 3: Subscriptions
None
doglife.com/sign_up plan = Basic ($9.99) Feature #3: User subscribes to
a plan ???
“Writing code to manage subscriptions is easy.” - nobody, ever
Your subscriptions code
PayPal
None
PayPal
None
“Stripe makes recurring and subscription-based billing easy.”
None
None
None
:CreateRecurringPaymentsProfileRequestDetails PayPal
None
“My company makes your life easy.”
doglife.com/sign_up plan = Basic ($9.99) Feature #3: User subscribes to
a plan
None
[email protected]
[email protected]
⁉
[email protected]
leanpub.com/multi-tenancy-rails/c/railspacific $10 off