{"id":26431,"date":"2017-02-28T11:47:35","date_gmt":"2017-02-28T11:47:35","guid":{"rendered":"https:\/\/dev.railscarma.com\/multi-tenancy-using-apartment-gem\/"},"modified":"2024-01-10T12:57:15","modified_gmt":"2024-01-10T12:57:15","slug":"multi-locazione-utilizzando-lappartamento-gem","status":"publish","type":"post","link":"https:\/\/www.railscarma.com\/it\/blog\/articoli-tecnici\/multi-locazione-utilizzando-lappartamento-gem\/","title":{"rendered":"Multi Tenancy utilizzando l&#039;appartamento gem"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"26431\" class=\"elementor elementor-26431\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-21371e45 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"21371e45\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-5d40d7d7\" data-id=\"5d40d7d7\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-40712c7c elementor-widget elementor-widget-text-editor\" data-id=\"40712c7c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Cerchiamo innanzitutto di capire la differenza tra single e multi-tenancy<br>\n<strong><br>\nLocazione singola<\/strong>:<\/p>\n<p align=\"justify\">Ogni cliente ha la propria istanza software, il proprio DB e serve per un solo cliente. In questo caso il software pu\u00f2 essere personalizzato per soddisfare le specifiche esigenze del cliente poich\u00e9 \u00e8 indipendente.<\/p>\n<p><strong><br>\nMultilocazione:<\/strong><\/p>\n<p align=\"justify\">In questo caso, una singola istanza dell&#039;applicazione software serve pi\u00f9 clienti. Qui chiamiamo ogni cliente come inquilino. Qui possiamo modificare le regole dell&#039;interfaccia utente e le regole aziendali ma non possiamo modificare il codice dell&#039;applicazione poich\u00e9 la stessa architettura \u00e8 condivisa da pi\u00f9 clienti. \u00c8 economico poich\u00e9 i costi di sviluppo e manutenzione del software sono condivisi tra i clienti. Ma gli aggiornamenti possono essere effettuati solo dal provider.<\/p>\n<p><a href=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2024\/01\/singletenant-multitenant.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-26437\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2024\/01\/singletenant-multitenant.png\" alt=\"singolo-tenente-multitenente\" width=\"502\" height=\"182\"><\/a><br>\n<strong>Vantaggi: <\/strong><br>\n1. Un unico hardware che gestisce pi\u00f9 clienti.<br>\n2. Risparmio sui costi. I costi possono essere ripartiti tra tutti i clienti.<br>\n3. Facile manutenzione<br>\n4. La configurazione pu\u00f2 essere modificata senza toccare la base di codice.<br>\n5. \u00c8 possibile aggiungere facilmente nuovi inquilini, poich\u00e9 si tratta di un'architettura condivisa.<\/p>\n<p><strong>Svantaggi:<\/strong><br>\nLa personalizzazione del DB sar\u00e0 difficile da gestire, poich\u00e9 si tratta di un unico DB condiviso tra pi\u00f9 clienti con tenant diversi.<\/p>\n<p>Esistono milia, acts_as_tenant e apartment gem per gestire la multi-tenancy nell'applicazione Rails.<\/p>\n<p><strong>Appartamento gioiello:<\/strong><\/p>\n<p align=\"justify\">Questo gioiello adotta un modo diverso di gestire la multi-tenancy. Funziona creando un altro DB per ciascun inquilino. Per PostgreSql, crea un altro schema per ciascun tenant. Mi piace questo approccio alla luce del fatto che, per questa situazione, l&#039;informazione \u00e8 davvero disimpegnata. Il database non \u00e8 condiviso e, nel caso in cui sia necessario cancellare le informazioni di un cliente, tutto ci\u00f2 che devi fare \u00e8 semplicemente eliminare il suo database (o modello). Supporta anche gli ascensori e consente il passaggio automatico tra l&#039;inquilino del cliente e quindi l&#039;automazione della logica di commutazione.<\/p>\n<p>Questo gemma ci aiuta a gestire la multi tenancy in un'applicazione Rails.<\/p>\n<p>Aggiungete la riga sottostante al vostro Gemfile ed eseguite l'installazione del bundle.<\/p>\n<pre><code>gioiello &quot;appartamento&quot;<\/code><\/pre>\n<p>Per generare il file inizializzatore dell&#039;appartamento, esegui il comando seguente:<\/p>\n<pre><code>bundle exec rails genera apartment:install<\/code><\/pre>\n<pre><code>config.excluded_models = %w{ Tenant } <\/code><\/pre>\n<p>Qui si possono specificare i tenant di portata globale, come il modello di autenticazione, comune a tutti i tenant.<\/p>\n<p>In questo caso, creer\u00f2 un cliente con sottodomini, in modo che ogni volta che il cliente accede all'applicazione, l'appartamento recupera i sottodomini e interroga il database, in base al sottodominio dell'inquilino.<\/p>\n<pre><code>rotaie g impalcatura Nome cliente:string tenant_domain:string<\/code><\/pre>\n<p>Fare<\/p>\n<pre><code>rotaie db:migrare<\/code><\/pre>\n<p>Dobbiamo creare l&#039;inquilino dell&#039;appartamento, una volta creato il cliente.<\/p>\n<pre><code>Appartamento::Tenant.create(&#039;tenant_name&#039;) - Per creare un inquilino<\/code><\/pre>\n<p>Utilizza after_create callback nel tuo modello per creare tenant.<\/p>\n<pre><code>def crea_tenant Appartamento::Tenant.create(tenant_domain) end<\/code><\/pre>\n<p>Una volta eseguito il callback di cui sopra, tutte le migrazioni verranno eseguite sotto il rispettivo tenant.<\/p>\n<p>La commutazione dei sottodomini sar\u00e0 gestita automaticamente quando si richiede l'applicazione con i sottodomini. Di seguito \u00e8 riportata la linea di configurazione per cambiare i tenant in base al sottodominio.<\/p>\n<pre><code>Rails.application.config.middleware.use &#039;Appartamento::Ascensori::Sottodominio&#039;<\/code><\/pre>\n<p>Per passare da un inquilino all&#039;altro<\/p>\n<pre><code>Appartamento::Inquilino.switch!(&#039;nome_inquilino&#039;)<\/code><\/pre>\n<p>Tutte le query di ActiveRecord saranno indirizzate al tenant specifico quando viene richiesto lo switch.<br>\nSwitch si trover\u00e0 nell'ambito root quando viene chiamato senza argomenti.<\/p>\n<p>Anche il cambio di inquilino pu\u00f2 essere fatto in base al primo sottodominio, ma \u00e8 necessario impostare la configurazione nel file di inizializzazione. Possiamo anche escludere alcuni sottodomini, come il sottodominio normale.<\/p>\n<pre><code>config.middleware.use &#039;Appartamento::Ascensori::PrimoSottodominio&#039;<\/code><\/pre>\n<pre><code>Appartamento::Ascensori::FirstSubdomain.excluded_subdomains = [&#039;www&#039;]<\/code><\/pre>\n<p>Possiamo anche limitare gli utenti a non creare alcuni domini come www, admin. Questi domini non saranno disponibili per gli utenti durante la registrazione.<\/p>\n<p>\u00c8 necessario decommentare la riga di configurazione sottostante nel file inizializzatore dell'appartamento.<\/p>\n<pre><code>Appartamento::Ascensori::Sottodominio.excluded_subdomains = [&quot;pubblico&quot;, &quot;www&quot; e &quot;admin&quot;]<\/code><\/pre>\n<p>Possiamo anche cambiare, in base all&#039;host completo. Qui dobbiamo trovare il nome del tenant corrispondente nell&#039;hash utilizzando la seguente riga di configurazione. Dobbiamo aggiungere la riga seguente al tuo application.rb<\/p>\n<pre><code>config.middleware.use &#039;Appartamento::Ascensori::HostHash&#039;, {&#039;example.com&#039; =&gt; &#039;example_tenant&#039;}<\/code><\/pre>\n<p><strong>Abbandonare gli inquilini:<\/strong><\/p>\n<p>Il comando seguente pu\u00f2 essere utilizzato per eliminare i tenant:<\/p>\n<pre><code>Appartamento::Inquilino.drop(&#039;nome_inquilino&#039;)<\/code><\/pre>\n<p>Si prega di controllare la risorsa ufficiale di gem per trovare ulteriore documentazione.&nbsp;<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6509506b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6509506b\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-75546e10\" data-id=\"75546e10\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2cde0c4d elementor-widget elementor-widget-heading\" data-id=\"2cde0c4d\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Iscriviti per gli ultimi aggiornamenti<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-389e5aba elementor-widget elementor-widget-shortcode\" data-id=\"389e5aba\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\t\t\t\t\t<script type=\"text\/javascript\">\n\t\t\t\t\t\tvar gCaptchaSibWidget;\n                        var onloadSibCallbackInvisible = function () {\n\n                            var element = document.getElementsByClassName('sib-default-btn');\n                            var countInvisible = 0;\n                            var indexArray = [];\n                            jQuery('.sib-default-btn').each(function (index, el) {\n                                if ((jQuery(el).attr('id') == \"invisible\")) {\n                                    indexArray[countInvisible] = index;\n                                    countInvisible++\n                                }\n                            });\n\n                            jQuery('.invi-recaptcha').each(function (index, el) {\n                                grecaptcha.render(element[indexArray[index]], {\n                                    'sitekey': jQuery(el).attr('data-sitekey'),\n                                    'callback': sibVerifyCallback,\n                                });\n                            });\n                        };\n\t\t\t\t\t<\/script>\n\t\t\t\t\t                <script src=\"https:\/\/www.google.com\/recaptcha\/api.js?onload=onloadSibCallbackInvisible&render=explicit\" async defer><\/script>\n\t\t\t\t\n\t\t\t<form id=\"sib_signup_form_1\" method=\"post\" class=\"sib_signup_form\" action=\"\">\n\t\t\t\t<div class=\"sib_loader\" style=\"display:none;\"><img\n\t\t\t\t\t\t\tsrc=\"https:\/\/www.railscarma.com\/wp-includes\/images\/spinner.gif\" alt=\"caricatore\"><\/div>\n\t\t\t\t<input type=\"hidden\" name=\"sib_form_action\" value=\"subscribe_form_submit\">\n\t\t\t\t<input type=\"hidden\" name=\"sib_form_id\" value=\"1\">\n                <input type=\"hidden\" name=\"sib_form_alert_notice\" value=\"Please fill out this field\">\n                <input type=\"hidden\" name=\"sib_form_invalid_email_notice\" value=\"Your email address is invalid\">\n                <input type=\"hidden\" name=\"sib_security\" value=\"d7f7626ab9\">\n\t\t\t\t<div class=\"sib_signup_box_inside_1\">\n\t\t\t\t\t<div style=\"\/*display:none*\/\" class=\"sib_msg_disp\">\n\t\t\t\t\t<\/div>\n                                            <div id=\"sib_captcha_invisible\" class=\"invi-recaptcha\" data-sitekey=\"6LdikOAaAAAAAJ6SWrrKVQrtw7TQpQAEnv0HS0G3\"><\/div>\n                    \t\t\t\t\t<p class=\"sib-email-area\">\r\n    <label class=\"sib-email-area\"><\/label>\r\n    <input type=\"email\" class=\"sib-email-area\" name=\"email\" required=\"required\" placeholder=\"Indirizzo e-mail\">\r\n<\/p>\r\n<p class=\"sib-NAME-area\">\r\n    <label class=\"sib-NAME-area\"><\/label>\r\n    <input type=\"text\" class=\"sib-NAME-area\" name=\"NAME\" placeholder=\"Nome\">\r\n<\/p>\r\n<p>\r\n    <input type=\"submit\" id=\"invisible\" class=\"sib-default-btn\" value=\"sottoscrivi\">\r\n<\/p>\t\t\t\t<\/div>\n\t\t\t<input type=\"hidden\" name=\"trp-form-language\" value=\"it\"\/><\/form>\n\t\t\t<style>\n\t\t\t\tform#sib_signup_form_1 p.sib-alert-message {\n    padding: 6px 12px;\n    margin-bottom: 20px;\n    border: 1px solid transparent;\n    border-radius: 4px;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\nform#sib_signup_form_1 p.sib-alert-message-error {\n    background-color: #f2dede;\n    border-color: #ebccd1;\n    color: #a94442;\n}\nform#sib_signup_form_1 p.sib-alert-message-success {\n    background-color: #dff0d8;\n    border-color: #d6e9c6;\n    color: #3c763d;\n}\nform#sib_signup_form_1 p.sib-alert-message-warning {\n    background-color: #fcf8e3;\n    border-color: #faebcc;\n    color: #8a6d3b;\n}\n\t\t\t<\/style>\n\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t  <div class=\"related-post slider\">\r\n        <div class=\"headline\">Articoli correlati<\/div>\r\n    <div class=\"post-list owl-carousel\">\r\n\r\n            <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Gemma Kaminari\" href=\"https:\/\/www.railscarma.com\/it\/blog\/articoli-tecnici\/gemma-di-kaminari\/?related_post_from=37277\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"gemma di Kaminari\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2023\/04\/kaminari-gem-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Gemma Kaminari\" href=\"https:\/\/www.railscarma.com\/it\/blog\/articoli-tecnici\/gemma-di-kaminari\/?related_post_from=37277\">\r\n        Gemma Kaminari  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Perch\u00e9 assumere sviluppatori Ruby on Rails nel 2026?\" href=\"https:\/\/www.railscarma.com\/it\/blog\/roro\/perche-assumere-sviluppatori-di-ruby-on-rails\/?related_post_from=30627\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"perch\u00e9 assumere sviluppatori di Ruby on Rails nel 2022\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2019\/01\/why-to-hire-ruby-on-rails-developers-in-2022-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Perch\u00e9 assumere sviluppatori Ruby on Rails nel 2026?\" href=\"https:\/\/www.railscarma.com\/it\/blog\/roro\/perche-assumere-sviluppatori-di-ruby-on-rails\/?related_post_from=30627\">\r\n        Perch\u00e9 assumere sviluppatori Ruby on Rails nel 2026?  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Importanza dell&#039;architettura software nello sviluppo di software aziendale\" href=\"https:\/\/www.railscarma.com\/it\/blog\/roro\/importanza-dellarchitettura-software-nello-sviluppo-di-software-aziendale\/?related_post_from=36250\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"Importanza dell&#039;architettura software nello sviluppo di software aziendale\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/06\/Importance-of-Software-Architecture-in-enterprise-software-development-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Importanza dell&#039;architettura software nello sviluppo di software aziendale\" href=\"https:\/\/www.railscarma.com\/it\/blog\/roro\/importanza-dellarchitettura-software-nello-sviluppo-di-software-aziendale\/?related_post_from=36250\">\r\n        Importanza dell&#039;architettura software nello sviluppo di software aziendale  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Ruby IDE: i migliori IDE per lo sviluppo di Ruby on Rails\" href=\"https:\/\/www.railscarma.com\/it\/blog\/roro\/ruby-ide-le-migliori-idee-per-lo-sviluppo-di-ruby-on-rails\/?related_post_from=36125\">\r\n\r\n      <img decoding=\"async\" width=\"800\" height=\"300\" src=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT.jpg\" class=\"attachment-full size-full wp-post-image\" alt=\"LE MIGLIORI IDEE PER LO SVILUPPO DI RUBY ON RAILS\" srcset=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT.jpg 800w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT-300x113.jpg 300w, https:\/\/www.railscarma.com\/wp-content\/uploads\/2022\/01\/BEST-IDES-FOR-RUBY-ON-RAILS-DEVELOPMENT-768x288.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\r\n\r\n    <\/a>\r\n  <\/div>\r\n\r\n  <a class=\"title post_title\"  title=\"Ruby IDE: i migliori IDE per lo sviluppo di Ruby on Rails\" href=\"https:\/\/www.railscarma.com\/it\/blog\/roro\/ruby-ide-le-migliori-idee-per-lo-sviluppo-di-ruby-on-rails\/?related_post_from=36125\">\r\n        Ruby IDE: i migliori IDE per lo sviluppo di Ruby on Rails  <\/a>\r\n\r\n        <\/div>\r\n      \r\n  <\/div>\r\n\r\n  <script>\r\n      <\/script>\r\n  <style>\r\n    .related-post {}\r\n\r\n    .related-post .post-list {\r\n      text-align: left;\r\n          }\r\n\r\n    .related-post .post-list .item {\r\n      margin: 10px;\r\n      padding: 10px;\r\n          }\r\n\r\n    .related-post .headline {\r\n      font-size: 14px !important;\r\n      color: #999999 !important;\r\n          }\r\n\r\n    .related-post .post-list .item .post_thumb {\r\n      max-height: 220px;\r\n      margin: 10px 0px;\r\n      padding: 0px;\r\n      display: block;\r\n          }\r\n\r\n    .related-post .post-list .item .post_title {\r\n      font-size: 14px;\r\n      color: #000000;\r\n      margin: 10px 0px;\r\n      padding: 0px;\r\n      display: block;\r\n      text-decoration: none;\r\n          }\r\n\r\n    .related-post .post-list .item .post_excerpt {\r\n      font-size: 12px;\r\n      color: #3f3f3f;\r\n      margin: 10px 0px;\r\n      padding: 0px;\r\n      display: block;\r\n      text-decoration: none;\r\n          }\r\n\r\n    .related-post .owl-dots .owl-dot {\r\n          }\r\n\r\n      <\/style>\r\n      <script>\r\n      jQuery(document).ready(function($) {\r\n        $(\".related-post .post-list\").owlCarousel({\r\n          items: 2,\r\n          responsiveClass: true,\r\n          responsive: {\r\n            0: {\r\n              items: 1,\r\n            },\r\n            768: {\r\n              items: 2,\r\n            },\r\n            1200: {\r\n              items: 2,\r\n            }\r\n          },\r\n                      rewind: true,\r\n                                loop: true,\r\n                                center: false,\r\n                                autoplay: true,\r\n            autoplayHoverPause: true,\r\n                                nav: true,\r\n            navSpeed: 1000,\r\n            navText: ['<i class=\"fas fa-chevron-left\"><\/i>', '<i class=\"fas fa-chevron-right\"><\/i>'],\r\n                                dots: false,\r\n            dotsSpeed: 1200,\r\n                                                    rtl: false,\r\n          \r\n        });\r\n      });\r\n    <\/script>\r\n  <\/div>","protected":false},"excerpt":{"rendered":"<p>Let us first understand the difference between single and multi-tenancy Single tenancy: Every customer is having their own software instance, own DB and it serves for only one customer. Here, the software can be customized to meet the specific customer requirements as it is independent. Multi tenancy: In this case, single instance of software application &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/www.railscarma.com\/it\/blog\/ruby-regex-match-guide-with-examples\/\"> <span class=\"screen-reader-text\">Ruby Regex Match Guide (2026) with Examples<\/span> Leggi altro \"<\/a><\/p>","protected":false},"author":1,"featured_media":31798,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[384],"tags":[],"class_list":["post-26431","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technical-articles"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Multi Tenancy by using apartment gem - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development<\/title>\n<meta name=\"description\" content=\"Let us first understand the difference between single and multi-tenancy Single tenancy: Every customer is having their own software instance, own DB and\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.railscarma.com\/it\/blog\/articoli-tecnici\/multi-locazione-utilizzando-lappartamento-gem\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Multi Tenancy by using apartment gem - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\" \/>\n<meta property=\"og:description\" content=\"Let us first understand the difference between single and multi-tenancy Single tenancy: Every customer is having their own software instance, own DB and\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.railscarma.com\/it\/blog\/articoli-tecnici\/multi-locazione-utilizzando-lappartamento-gem\/\" \/>\n<meta property=\"og:site_name\" content=\"RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/RailsCarma\/\" \/>\n<meta property=\"article:published_time\" content=\"2017-02-28T11:47:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-10T12:57:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2017\/02\/Multi-Tenancy-by-using-apartment-gem.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@railscarma\" \/>\n<meta name=\"twitter:site\" content=\"@railscarma\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21\"},\"headline\":\"Multi Tenancy by using apartment gem\",\"datePublished\":\"2017-02-28T11:47:35+00:00\",\"dateModified\":\"2024-01-10T12:57:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/\"},\"wordCount\":619,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.railscarma.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2017\/02\/Multi-Tenancy-by-using-apartment-gem.jpg\",\"articleSection\":[\"Technical Articles\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/\",\"url\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/\",\"name\":\"Multi Tenancy by using apartment gem - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\",\"isPartOf\":{\"@id\":\"https:\/\/www.railscarma.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2017\/02\/Multi-Tenancy-by-using-apartment-gem.jpg\",\"datePublished\":\"2017-02-28T11:47:35+00:00\",\"dateModified\":\"2024-01-10T12:57:15+00:00\",\"description\":\"Let us first understand the difference between single and multi-tenancy Single tenancy: Every customer is having their own software instance, own DB and\",\"breadcrumb\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#primaryimage\",\"url\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2017\/02\/Multi-Tenancy-by-using-apartment-gem.jpg\",\"contentUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2017\/02\/Multi-Tenancy-by-using-apartment-gem.jpg\",\"width\":800,\"height\":300},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.railscarma.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Multi Tenancy by using apartment gem\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.railscarma.com\/#website\",\"url\":\"https:\/\/www.railscarma.com\/\",\"name\":\"RailsCarma - Ruby on Rails Development Company specializing in Offshore Development\",\"description\":\"RailsCarma is a Ruby on Rails Development Company in Bangalore. We specialize in Offshore Ruby on Rails Development based out in USA and India. Hire experienced Ruby on Rails developers for the ultimate Web Experience.\",\"publisher\":{\"@id\":\"https:\/\/www.railscarma.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.railscarma.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.railscarma.com\/#organization\",\"name\":\"RailsCarma\",\"url\":\"https:\/\/www.railscarma.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png\",\"contentUrl\":\"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png\",\"width\":200,\"height\":46,\"caption\":\"RailsCarma\"},\"image\":{\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/RailsCarma\/\",\"https:\/\/x.com\/railscarma\",\"https:\/\/www.linkedin.com\/company\/railscarma\/\",\"https:\/\/myspace.com\/railscarma\",\"https:\/\/in.pinterest.com\/railscarma\/\",\"https:\/\/www.youtube.com\/channel\/UCx3Wil-aAnDARuatTEyMdpg\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/www.railscarma.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"sameAs\":[\"https:\/\/www.railscarma.com\/hire-ruby-on-rails-developer\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Multi Tenancy utilizzando l&#039;appartamento gemma - RailsCarma - Ruby on Rails Development Company specializzata nello sviluppo offshore","description":"Comprendiamo innanzitutto la differenza tra single e multi-tenancy Single tenancy: ogni cliente ha la propria istanza software, il proprio DB e","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.railscarma.com\/it\/blog\/articoli-tecnici\/multi-locazione-utilizzando-lappartamento-gem\/","og_locale":"it_IT","og_type":"article","og_title":"Multi Tenancy by using apartment gem - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development","og_description":"Let us first understand the difference between single and multi-tenancy Single tenancy: Every customer is having their own software instance, own DB and","og_url":"https:\/\/www.railscarma.com\/it\/blog\/articoli-tecnici\/multi-locazione-utilizzando-lappartamento-gem\/","og_site_name":"RailsCarma - Ruby on Rails Development Company specializing in Offshore Development","article_publisher":"https:\/\/www.facebook.com\/RailsCarma\/","article_published_time":"2017-02-28T11:47:35+00:00","article_modified_time":"2024-01-10T12:57:15+00:00","og_image":[{"width":800,"height":300,"url":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2017\/02\/Multi-Tenancy-by-using-apartment-gem.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_creator":"@railscarma","twitter_site":"@railscarma","twitter_misc":{"Scritto da":"admin","Tempo di lettura stimato":"4 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#article","isPartOf":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/"},"author":{"name":"admin","@id":"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21"},"headline":"Multi Tenancy by using apartment gem","datePublished":"2017-02-28T11:47:35+00:00","dateModified":"2024-01-10T12:57:15+00:00","mainEntityOfPage":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/"},"wordCount":619,"commentCount":0,"publisher":{"@id":"https:\/\/www.railscarma.com\/#organization"},"image":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#primaryimage"},"thumbnailUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2017\/02\/Multi-Tenancy-by-using-apartment-gem.jpg","articleSection":["Technical Articles"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/","url":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/","name":"Multi Tenancy utilizzando l&#039;appartamento gemma - RailsCarma - Ruby on Rails Development Company specializzata nello sviluppo offshore","isPartOf":{"@id":"https:\/\/www.railscarma.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#primaryimage"},"image":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#primaryimage"},"thumbnailUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2017\/02\/Multi-Tenancy-by-using-apartment-gem.jpg","datePublished":"2017-02-28T11:47:35+00:00","dateModified":"2024-01-10T12:57:15+00:00","description":"Comprendiamo innanzitutto la differenza tra single e multi-tenancy Single tenancy: ogni cliente ha la propria istanza software, il proprio DB e","breadcrumb":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#primaryimage","url":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2017\/02\/Multi-Tenancy-by-using-apartment-gem.jpg","contentUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2017\/02\/Multi-Tenancy-by-using-apartment-gem.jpg","width":800,"height":300},{"@type":"BreadcrumbList","@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.railscarma.com\/"},{"@type":"ListItem","position":2,"name":"Multi Tenancy by using apartment gem"}]},{"@type":"WebSite","@id":"https:\/\/www.railscarma.com\/#website","url":"https:\/\/www.railscarma.com\/","name":"RailsCarma - Societ\u00e0 di sviluppo Ruby on Rails specializzata nello sviluppo offshore","description":"RailsCarma \u00e8 una societ\u00e0 di sviluppo Ruby on Rails a Bangalore. Siamo specializzati nello sviluppo offshore di Ruby on Rails con sede negli Stati Uniti e in India. Assumi sviluppatori esperti di Ruby on Rails per la migliore esperienza Web.","publisher":{"@id":"https:\/\/www.railscarma.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.railscarma.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/www.railscarma.com\/#organization","name":"RailsCarma","url":"https:\/\/www.railscarma.com\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png","contentUrl":"https:\/\/www.railscarma.com\/wp-content\/uploads\/2020\/08\/railscarma_logo.png","width":200,"height":46,"caption":"RailsCarma"},"image":{"@id":"https:\/\/www.railscarma.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/RailsCarma\/","https:\/\/x.com\/railscarma","https:\/\/www.linkedin.com\/company\/railscarma\/","https:\/\/myspace.com\/railscarma","https:\/\/in.pinterest.com\/railscarma\/","https:\/\/www.youtube.com\/channel\/UCx3Wil-aAnDARuatTEyMdpg"]},{"@type":"Person","@id":"https:\/\/www.railscarma.com\/#\/schema\/person\/5f2228a2dec7549056e709de6eb85d21","name":"amministratore","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/www.railscarma.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/308867ca6c81f3aba146080c601000087180326f752c4116849ea9f514c6a4fa?s=96&d=mm&r=g","caption":"admin"},"sameAs":["https:\/\/www.railscarma.com\/hire-ruby-on-rails-developer\/"]}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/posts\/26431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/comments?post=26431"}],"version-history":[{"count":0,"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/posts\/26431\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/media\/31798"}],"wp:attachment":[{"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/media?parent=26431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/categories?post=26431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.railscarma.com\/it\/wp-json\/wp\/v2\/tags?post=26431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}