Damp patches
Moisture and cracks: is there a link between the two?
August 27
wall-drying-solution
Ecological solutions to limit humidity in the home
August 27

Uni Ecto Plugin -

def get_orders_with_global_settings do query = from o in Order, join: s in Setting, on: true, # Global join select: o, s Repo.all(query, prefix: UniEcto.Plugin.get_tenant_prefix()) end Handling Migrations with The Plugin The trickiest part of multi-tenancy is database schema updates. You cannot just run mix ecto.migrate .

def call(conn, _opts) do # Extract subdomain or API key tenant = get_tenant_from_subdomain(conn) uni ecto plugin

defmodule MyApp.Repo do use Ecto.Repo, otp_app: :my_app use UniEcto.Plugin, prefix_key: :tenant_prefix def all_tenants do # Could be a DB query or a static list ["public", "tenant_customer_a", "tenant_customer_b"] end end Step 3: Generate the Tenant Migrations The plugin usually provides a generator: def get_orders_with_global_settings do query = from o in

# config/config.exs config :uni_ecto_plugin, :cache, enabled: true, ttl: :timer.hours(1) The plugin will cache the list of valid tenants in an ETS table. Validating a prefix becomes an O(1) memory read instead of a SQL query. 1. The "Prefix Not Set" Error Error: (Ecto.NoResultsError) expected query to return a prefix, but none was set Fix: Ensure your TenantResolver plug runs before any database calls in your controller pipeline. 2. Association Loading Fails If you have a belongs_to across schemas, Ecto may struggle with prefixes. Fix: Define associations with explicit prefixes or use Repo.assoc with the tenant prefix manually. Validating a prefix becomes an O(1) memory read

defmodule MyApp.Repo.Migrations.AddNotesToOrders do use Ecto.Migration import UniEcto.MigrationHelpers def up do # Runs on all existing tenants + public for tenant <- UniEcto.Plugin.all_tenants() do execute("SET search_path TO #tenant") alter table(:orders) do add :notes, :text end end end end

Humidistop® – ATE and ATG polarity inverters, the sustainable solution against wall dampness
Summary of the privacy policy

This site uses cookies so that we can provide you with the best possible user experience. The information about cookies is stored in your browser and performs functions such as recognizing you when you return to our website and helping our team understand the sections of the site that you find most interesting and useful.