{"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":"arrendamiento-multiple-usando-apartamento-joya","status":"publish","type":"post","link":"https:\/\/www.railscarma.com\/es\/blog\/articulos-tecnicos\/arrendamiento-multiple-usando-apartamento-joya\/","title":{"rendered":"Inquilino m\u00faltiple mediante el uso de la joya del apartamento"},"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>Primero, comprendamos la diferencia entre arrendamiento \u00fanico y arrendamiento m\u00faltiple.<br>\n<strong><br>\narrendamiento \u00fanico<\/strong>:<\/p>\n<p align=\"justify\">Cada cliente tiene su propia instancia de software, su propia base de datos y sirve para un solo cliente. Aqu\u00ed, el software se puede personalizar para cumplir con los requisitos espec\u00edficos del cliente, ya que es independiente.<\/p>\n<p><strong><br>\nMulti Alquiler:<\/strong><\/p>\n<p align=\"justify\">En este caso, una \u00fanica instancia de aplicaci\u00f3n de software sirve a varios clientes. Aqu\u00ed llamamos a cada cliente inquilino. Aqu\u00ed podemos modificar las reglas de la interfaz de usuario y las reglas comerciales, pero no podemos modificar el c\u00f3digo de la aplicaci\u00f3n, ya que varios clientes comparten la misma arquitectura. Es econ\u00f3mico ya que los costos de desarrollo y mantenimiento del software se comparten entre los clientes. Pero las actualizaciones s\u00f3lo las puede realizar el proveedor.<\/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=\"singletenant-multitenant\" width=\"502\" height=\"182\"><\/a><br>\n<strong>Ventajas: <\/strong><br>\n1. Single hardware that manages multiple customers.<br>\n2. Cost savings. Cost can be shared between all the customers.<br>\n3. Easy maintenance<br>\n4. Configuration can be changed without touching codebase.<br>\n5. New tenants can be added easily since it is a shared architecture.<\/p>\n<p><strong>Desventajas:<\/strong><br>\nDB customization will be difficult to handle since it is a single DB shared between multiple customers with different tenants.<\/p>\n<p>There are milia, acts_as_tenant and apartment gem to handle multi-tenancy in the Rails application.<\/p>\n<p><strong>Apartamento joya:<\/strong><\/p>\n<p align=\"justify\">Esta joya adopta una forma diferente de lidiar con el arrendamiento m\u00faltiple. Funciona creando otra base de datos para cada inquilino. Para PostgreSql, crea otro esquema para cada inquilino. Me gusta este enfoque porque, en esta situaci\u00f3n, la informaci\u00f3n es realmente desconectada. La base de datos no se comparte y, en caso de que necesite borrar la informaci\u00f3n de un cliente, todo lo que necesita hacer es simplemente eliminar su base de datos (o patr\u00f3n). Tambi\u00e9n admite ascensores y permite el cambio autom\u00e1tico entre el inquilino del cliente y, por lo tanto, automatiza la l\u00f3gica de cambio.<\/p>\n<p>This gem helps us to deal with multi tenancy in Rails application.<\/p>\n<p>Add the line below, to your Gemfile and perform bundle install.<\/p>\n<pre><code>joya &#039;apartamento&#039;<\/code><\/pre>\n<p>Para generar un archivo inicializador de apartamento, ejecute el siguiente comando:<\/p>\n<pre><code>paquete de rieles ejecutivos genera apartamento: instalar<\/code><\/pre>\n<pre><code>config.excluded_models = %w{ Inquilino } <\/code><\/pre>\n<p>Here, we can specify the tenants which are of global scope, such as the Authentication model which is a common one for all the tenants.<\/p>\n<p>Here, I will be creating a Customer with subdomains, so, whenever customer logs in to the application, apartment fetches the subdomains and will query the database, based on tenant subdomain.<\/p>\n<pre><code>rieles g andamio Nombre del cliente: cadena inquilino_dominio: cadena<\/code><\/pre>\n<p>hacer<\/p>\n<pre><code>rieles db:migrar<\/code><\/pre>\n<p>Necesitamos crear el inquilino del apartamento, una vez que hayamos creado el cliente.<\/p>\n<pre><code>Apartment::Tenant.create(&#039;tenant_name&#039;) - Para crear un inquilino<\/code><\/pre>\n<p>Utilice la devoluci\u00f3n de llamada after_create en su modelo para crear inquilinos.<\/p>\n<pre><code>def create_tenant Apartamento::Tenant.create(tenant_domain) fin<\/code><\/pre>\n<p>Once the above callback gets executed, all the migrations will run under that respective tenant.<\/p>\n<p>Switching of subdomains will be handled automatically when we request the application with subdomains. Below is the configuration line to switch the tenants based on subdomain.<\/p>\n<pre><code>Rails.application.config.middleware.use &#039;Apartamento::Ascensores::Subdominio&#039;<\/code><\/pre>\n<p>Para cambiar entre los inquilinos<\/p>\n<pre><code>Apartamento::Inquilino.cambiar!(&#039;nombre_inquilino&#039;)<\/code><\/pre>\n<p>All your ActiveRecord queries will be routed to the specific tenant when switch is called for.<br>\nSwitch will be in the root scope when you call with no arguments.<\/p>\n<p>Even tenant switch can be done based on the first subdomain but we need to set config in the initializer file. We can even exclude some subdomains here, such as the normal subdomain.<\/p>\n<pre><code>config.middleware.use &#039;Apartamento::Ascensores::PrimerSubdominio&#039;<\/code><\/pre>\n<pre><code>Apartamento::Ascensores::PrimerSubdominio.subdominios_excluidos = [&#039;www&#039;]<\/code><\/pre>\n<p>We can also restrict the users not to create some domains such as www, admin. These domains will not be available for the users while they were being registered.<\/p>\n<p>Need to uncomment below config line in the apartment initializer file.<\/p>\n<pre><code>Apartamento::Ascensores::Subdominio.subdominios_excluidos = [&quot;p\u00fablico&quot;, &quot;www&quot; y &quot;admin&quot; ]<\/code><\/pre>\n<p>Tambi\u00e9n podemos cambiar, seg\u00fan el host completo. Aqu\u00ed, necesitamos encontrar el nombre del inquilino correspondiente en el hash usando la siguiente l\u00ednea de configuraci\u00f3n. Necesitamos agregar la siguiente l\u00ednea a su aplicaci\u00f3n.rb<\/p>\n<pre><code>config.middleware.use &#039;Apartamento::Ascensores::HostHash&#039;, {&#039;example.com&#039; =&gt; &#039;example_tenant&#039;}<\/code><\/pre>\n<p><strong>Bajar inquilinos:<\/strong><\/p>\n<p>El siguiente comando se puede utilizar para eliminar inquilinos:<\/p>\n<pre><code>Apartamento::Inquilino.drop(&#039;nombre_inquilino&#039;)<\/code><\/pre>\n<p>Consulte el recurso oficial de Gem para encontrar m\u00e1s documentaci\u00f3n.&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\">Suscr\u00edbete para recibir las \u00faltimas actualizaciones<\/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=\"cargador\"><\/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=\"Direcci\u00f3n de correo electr\u00f3nico\">\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=\"Nombre\">\r\n<\/p>\r\n<p>\r\n    <input type=\"submit\" id=\"invisible\" class=\"sib-default-btn\" value=\"Suscribir\">\r\n<\/p>\t\t\t\t<\/div>\n\t\t\t<input type=\"hidden\" name=\"trp-form-language\" value=\"es\"\/><\/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\">Art\u00edculos Relacionados<\/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=\"Gema Kaminari\" href=\"https:\/\/www.railscarma.com\/es\/blog\/articulos-tecnicos\/gema-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=\"gema 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=\"Gema Kaminari\" href=\"https:\/\/www.railscarma.com\/es\/blog\/articulos-tecnicos\/gema-kaminari\/?related_post_from=37277\">\r\n        Gema Kaminari  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"\u00bfPor qu\u00e9 contratar desarrolladores Ruby on Rails en 2026?\" href=\"https:\/\/www.railscarma.com\/es\/blog\/ror\/por-que-contratar-desarrolladores-de-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=\"por qu\u00e9 contratar desarrolladores de Ruby on Rails en 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=\"\u00bfPor qu\u00e9 contratar desarrolladores Ruby on Rails en 2026?\" href=\"https:\/\/www.railscarma.com\/es\/blog\/ror\/por-que-contratar-desarrolladores-de-ruby-on-rails\/?related_post_from=30627\">\r\n        \u00bfPor qu\u00e9 contratar desarrolladores Ruby on Rails en 2026?  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Importancia de la arquitectura de software en el desarrollo de software empresarial\" href=\"https:\/\/www.railscarma.com\/es\/blog\/ror\/importancia-de-la-arquitectura-de-software-en-el-desarrollo-de-software-empresarial\/?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=\"Importancia de la arquitectura de software en el desarrollo de software empresarial\" 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=\"Importancia de la arquitectura de software en el desarrollo de software empresarial\" href=\"https:\/\/www.railscarma.com\/es\/blog\/ror\/importancia-de-la-arquitectura-de-software-en-el-desarrollo-de-software-empresarial\/?related_post_from=36250\">\r\n        Importancia de la arquitectura de software en el desarrollo de software empresarial  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Ruby IDE: los mejores IDE para el desarrollo de Ruby on Rails\" href=\"https:\/\/www.railscarma.com\/es\/blog\/ror\/ruby-ide-las-mejores-ideas-para-el-desarrollo-de-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=\"MEJORES IDES PARA EL DESARROLLO DE 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: los mejores IDE para el desarrollo de Ruby on Rails\" href=\"https:\/\/www.railscarma.com\/es\/blog\/ror\/ruby-ide-las-mejores-ideas-para-el-desarrollo-de-ruby-on-rails\/?related_post_from=36125\">\r\n        Ruby IDE: los mejores IDE para el desarrollo de 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\/es\/blog\/ruby-regex-match-guide-with-examples\/\"> <span class=\"screen-reader-text\">Ruby Regex Match Guide (2026) con Ejemplos<\/span> Leer m\u00e1s \u00bb<\/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\/es\/blog\/articulos-tecnicos\/arrendamiento-multiple-usando-apartamento-joya\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/blog\/articulos-tecnicos\/arrendamiento-multiple-usando-apartamento-joya\/\" \/>\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=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.railscarma.com\/#organization\",\"name\":\"RailsCarma\",\"url\":\"https:\/\/www.railscarma.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@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":"Multitenencia mediante el uso de apartamentos joya - RailsCarma - Ruby on Rails Development Company especializada en desarrollo offshore","description":"Primero, comprendamos la diferencia entre arrendamiento \u00fanico y arrendamiento m\u00faltiple. Arrendamiento \u00fanico: cada cliente tiene su propia instancia de software, su propia base de datos y","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\/es\/blog\/articulos-tecnicos\/arrendamiento-multiple-usando-apartamento-joya\/","og_locale":"es_ES","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\/es\/blog\/articulos-tecnicos\/arrendamiento-multiple-usando-apartamento-joya\/","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":{"Escrito por":"admin","Tiempo de lectura":"4 minutos"},"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":"es","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":"Multitenencia mediante el uso de apartamentos joya - RailsCarma - Ruby on Rails Development Company especializada en desarrollo 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":"Primero, comprendamos la diferencia entre arrendamiento \u00fanico y arrendamiento m\u00faltiple. Arrendamiento \u00fanico: cada cliente tiene su propia instancia de software, su propia base de datos y","breadcrumb":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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 - Empresa de desarrollo Ruby on Rails especializada en desarrollo offshore","description":"RailsCarma es una empresa de desarrollo de Ruby on Rails en Bangalore. Nos especializamos en el desarrollo offshore de Ruby on Rails con sede en EE. UU. e India. Contrate desarrolladores experimentados de Ruby on Rails para disfrutar de la mejor experiencia 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":"es"},{"@type":"Organization","@id":"https:\/\/www.railscarma.com\/#organization","name":"RielesCarma","url":"https:\/\/www.railscarma.com\/","logo":{"@type":"ImageObject","inLanguage":"es","@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":"administraci\u00f3n","image":{"@type":"ImageObject","inLanguage":"es","@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\/es\/wp-json\/wp\/v2\/posts\/26431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.railscarma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.railscarma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/es\/wp-json\/wp\/v2\/comments?post=26431"}],"version-history":[{"count":0,"href":"https:\/\/www.railscarma.com\/es\/wp-json\/wp\/v2\/posts\/26431\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/es\/wp-json\/wp\/v2\/media\/31798"}],"wp:attachment":[{"href":"https:\/\/www.railscarma.com\/es\/wp-json\/wp\/v2\/media?parent=26431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.railscarma.com\/es\/wp-json\/wp\/v2\/categories?post=26431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.railscarma.com\/es\/wp-json\/wp\/v2\/tags?post=26431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}