ProductPromotion
Logo

Elixir

made by https://0x3d.site

GitHub - ateliware/triplex: Database multitenancy for Elixir applications!
Database multitenancy for Elixir applications! Contribute to ateliware/triplex development by creating an account on GitHub.
Visit Site

GitHub - ateliware/triplex: Database multitenancy for Elixir applications!

GitHub - ateliware/triplex: Database multitenancy for Elixir applications!

Triplex

Build Status Version Downloads Coverage Status Code Climate Inline docs

A simple and effective way to build multitenant applications on top of Ecto.

Documentation

Triplex leverages database data segregation techniques (such as Postgres schemas) to keep tenant-specific data separated, while allowing you to continue using the Ecto functions you are familiar with.

Quick Start

  1. Add triplex to your list of dependencies in mix.exs:
def deps do
  [
    {:triplex, "~> 1.3.0"},
  ]
end
  1. Run in your shell:
mix deps.get

Configuration

Configure the Repo you will use to execute the database commands with:

config :triplex, repo: ExampleApp.Repo

Additional configuration for MySQL

In MySQL, each tenant will have its own MySQL database. Triplex uses a table called tenants in the main Repo to keep track of the different tenants. Generate the migration that will create the table by running:

mix triplex.mysql.install

And then create the table:

mix ecto.migrate

Otherwise, if you wish to skip this behavior, configure Triplex to use the default information_schema.schemata table:

config :triplex, tenant_table: :"information_schema.schemata"

Usage

Here is a quick overview of what you can do with triplex!

Creating, renaming and dropping tenants

To create a new tenant:

Triplex.create("your_tenant")

This will create a new database schema and run your migrations—which may take a while depending on your application.

Rename a tenant:

Triplex.rename("your_tenant", "my_tenant")

This is not something you should need to do often. :-)

Delete a tenant:

Triplex.drop("my_tenant")

More information on the API can be found in documentation.

Creating tenant migrations

To create a migration to run across tenant schemas:

mix triplex.gen.migration your_migration_name

If migrating an existing project to use Triplex, you can move some or all of your existing migrations from priv/YOUR_REPO/migrations to priv/YOUR_REPO/tenant_migrations.

Triplex and Ecto will automatically add prefixes to standard migration functions. If you have custom SQL in your migrations, you will need to use the prefix function provided by Ecto. e.g.

def up do
  execute "CREATE INDEX name_trgm_index ON #{prefix()}.users USING gin (nam gin_trgm_ops);"
end

Running tenant migrations:

mix triplex.migrate

This will migrate all of your existing tenants, one by one. In the case of failure, the next run will continue from where it stopped.

Using Ecto

Your Ecto usage only needs the prefix option. Triplex provides a helper to coerce the tenant value into the proper format, e.g.:

Repo.all(User, prefix: Triplex.to_prefix("my_tenant"))
Repo.get!(User, 123, prefix: Triplex.to_prefix("my_tenant"))

Fetching the tenant with Plug

Triplex includes configurable plugs that you can use to load the current tenant in your application.

Here is an example loading the tenant from the current subdomain:

plug Triplex.SubdomainPlug, endpoint: MyApp.Endpoint

For more information, check the Triplex.Plug documentation for an overview of our plugs.

Thanks

This lib is inspired by the gem apartment, which does the same thing in Ruby on Rails world. We also give credit (and a lot of thanks) to @Dania02525 for the work on apartmentex. A lot of the work here is based on what she has done there. And also to @jeffdeville, who forked (tenantex) taking a different approach, which gave us additional ideas.

Articles
to learn more about the elixir concepts.

Resources
which are currently available to browse on.

mail [email protected] to add your project or resources here 🔥.

FAQ's
to know more about the topic.

mail [email protected] to add your project or resources here 🔥.

Queries
or most google FAQ's about Elixir.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory