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
240
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
380
Web Directions - Code Leaders - Hiring Juniors
radar
0
530
The Future of Rails - Take 2
radar
0
96
The Future of Rails
radar
1
100
Exploding Rails
radar
9
1.8k
Hiring Juniors
radar
2
410
The Perfect Coding Test
radar
0
110
Your First Developer Job
radar
1
110
Hiring Juniors
radar
2
270
Other Decks in Programming
See All in Programming
ドメインイベント増えすぎ問題
h0r15h0
2
560
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
28
4k
20年もののレガシープロダクトに 0からPHPStanを入れるまで / phpcon2024
hirobe1999
0
1k
Lookerは可視化だけじゃない。UIコンポーネントもあるんだ!
ymd65536
1
130
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
6
700
技術的負債と向き合うカイゼン活動を1年続けて分かった "持続可能" なプロダクト開発
yuichiro_serita
0
300
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
270
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
1.3k
AWS re:Invent 2024個人的まとめ
satoshi256kbyte
0
100
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
440
DevinとCursorから学ぶAIエージェントメモリーの設計とMoatの考え方
itarutomy
0
120
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
Featured
See All Featured
BBQ
matthewcrist
85
9.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.3k
Measuring & Analyzing Core Web Vitals
bluesmoon
5
210
Gamification - CAS2011
davidbonilla
80
5.1k
A better future with KSS
kneath
238
17k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
Making the Leap to Tech Lead
cromwellryan
133
9k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Rails Girls Zürich Keynote
gr2m
94
13k
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