{"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-tenancy-using-apartment-gem","status":"publish","type":"post","link":"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e6%8a%80%e8%a1%93%e8%ab%96%e6%96%87\/multi-tenancy-using-apartment-gem\/","title":{"rendered":"\u30a2\u30d1\u30fc\u30c8\u30e1\u30f3\u30c8\u30b8\u30a7\u30e0\u3092\u4f7f\u7528\u3057\u305f\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30b7\u30fc"},"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>\u307e\u305a\u30b7\u30f3\u30b0\u30eb\u30c6\u30ca\u30f3\u30c8\u3068\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30c8\u306e\u9055\u3044\u3092\u7406\u89e3\u3057\u307e\u3057\u3087\u3046<br>\n<strong><br>\n\u30b7\u30f3\u30b0\u30eb\u30c6\u30ca\u30f3\u30b7\u30fc<\/strong>:<\/p>\n<p align=\"justify\">\u3059\u3079\u3066\u306e\u9867\u5ba2\u306f\u72ec\u81ea\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3001\u72ec\u81ea\u306e DB \u3092\u6301\u3061\u3001\u305d\u308c\u306f 1 \u4eba\u306e\u9867\u5ba2\u306b\u306e\u307f\u30b5\u30fc\u30d3\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306f\u72ec\u7acb\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u7279\u5b9a\u306e\u9867\u5ba2\u8981\u4ef6\u3092\u6e80\u305f\u3059\u3088\u3046\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><strong><br>\n\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30c8:<\/strong><\/p>\n<p align=\"justify\">\u3053\u306e\u5834\u5408\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5358\u4e00\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8907\u6570\u306e\u9867\u5ba2\u306b\u30b5\u30fc\u30d3\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u5404\u9867\u5ba2\u3092\u30c6\u30ca\u30f3\u30c8\u3068\u547c\u3073\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001UI \u30eb\u30fc\u30eb\u3068\u30d3\u30b8\u30cd\u30b9 \u30eb\u30fc\u30eb\u3092\u5909\u66f4\u3067\u304d\u307e\u3059\u304c\u3001\u540c\u3058\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u304c\u8907\u6570\u306e\u9867\u5ba2\u306b\u3088\u3063\u3066\u5171\u6709\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 \u30b3\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u958b\u767a\u8cbb\u3084\u4fdd\u5b88\u8cbb\u3092\u304a\u5ba2\u69d8\u3067\u5206\u62c5\u3059\u308b\u305f\u3081\u7d4c\u6e08\u7684\u3067\u3059\u3002\u305f\u3060\u3057\u3001\u66f4\u65b0\u306f\u30d7\u30ed\u30d0\u30a4\u30c0\u30fc\u306e\u307f\u304c\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/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>\u5229\u70b9: <\/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>\u77ed\u6240:<\/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>\u30a2\u30d1\u30fc\u30c8\u30e1\u30f3\u30c8\u30b8\u30a7\u30e0:<\/strong><\/p>\n<p align=\"justify\">\u3053\u306e gem \u306f\u3001\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30b7\u30fc\u306b\u5bfe\u51e6\u3059\u308b\u305f\u3081\u306b\u5225\u306e\u65b9\u6cd5\u3092\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u30c6\u30ca\u30f3\u30c8\u3054\u3068\u306b\u5225\u306eDB\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3067\u6a5f\u80fd\u3057\u307e\u3059\u3002 PostgreSql \u306e\u5834\u5408\u3001\u30c6\u30ca\u30f3\u30c8\u3054\u3068\u306b\u5225\u306e\u30b9\u30ad\u30fc\u30de\u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u72b6\u6cc1\u3067\u306f\u60c5\u5831\u304c\u5b9f\u969b\u306b\u906e\u65ad\u3055\u308c\u3066\u3044\u308b\u3068\u3044\u3046\u4e8b\u5b9f\u3092\u8003\u616e\u3059\u308b\u3068\u3001\u79c1\u306f\u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u6c17\u306b\u5165\u3063\u3066\u3044\u307e\u3059\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u5171\u6709\u3055\u308c\u306a\u3044\u305f\u3081\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u60c5\u5831\u3092\u6d88\u53bb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 (\u307e\u305f\u306f\u30d1\u30bf\u30fc\u30f3) \u3092\u524a\u9664\u3059\u308b\u3060\u3051\u3067\u6e08\u307f\u307e\u3059\u3002\u307e\u305f\u3001\u30a8\u30ec\u30d9\u30fc\u30bf\u30fc\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304a\u308a\u3001\u9867\u5ba2\u306e\u30c6\u30ca\u30f3\u30c8\u9593\u306e\u81ea\u52d5\u5207\u308a\u66ff\u3048\u304c\u53ef\u80fd\u306b\u306a\u308a\u3001\u305d\u308c\u306b\u3088\u3063\u3066\u5207\u308a\u66ff\u3048\u30ed\u30b8\u30c3\u30af\u304c\u81ea\u52d5\u5316\u3055\u308c\u307e\u3059\u3002<\/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>\u5b9d\u77f3\u306e\u300c\u30a2\u30d1\u30fc\u30c8\u30e1\u30f3\u30c8\u300d<\/code><\/pre>\n<p>\u30a2\u30d1\u30fc\u30c8\u30e1\u30f3\u30c8\u521d\u671f\u5316\u30d5\u30a1\u30a4\u30eb\u3092\u751f\u6210\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<pre><code>Bundle exec Rails \u30a2\u30d1\u30fc\u30c8\u30e1\u30f3\u30c8\u306e\u751f\u6210:\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/code><\/pre>\n<pre><code>config.excluded_models = %w{ \u30c6\u30ca\u30f3\u30c8 } <\/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>Rails g scaffold \u9867\u5ba2\u540d:string tenant_domain:string<\/code><\/pre>\n<p>\u3059\u308b<\/p>\n<pre><code>Rails \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9:\u79fb\u884c<\/code><\/pre>\n<p>\u9867\u5ba2\u3092\u4f5c\u6210\u3057\u305f\u3089\u3001\u30a2\u30d1\u30fc\u30c8\u306e\u30c6\u30ca\u30f3\u30c8\u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<pre><code>Apartment::Tenant.create(&#039;tenant_name&#039;) - \u30c6\u30ca\u30f3\u30c8\u3092\u4f5c\u6210\u3059\u308b\u306b\u306f<\/code><\/pre>\n<p>\u30e2\u30c7\u30eb\u3067 after_create \u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u3092\u4f7f\u7528\u3057\u3066\u30c6\u30ca\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<pre><code>def create_tenant Apartment::Tenant.create(tenant_domain) end<\/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;Apartment::Elevators::Subdomain&#039;<\/code><\/pre>\n<p>\u30c6\u30ca\u30f3\u30c8\u3092\u5207\u308a\u66ff\u3048\u308b\u306b\u306f<\/p>\n<pre><code>\u30a2\u30d1\u30fc\u30c8\u30e1\u30f3\u30c8::\u30c6\u30ca\u30f3\u30c8.\u30b9\u30a4\u30c3\u30c1!(&#039;\u30c6\u30ca\u30f3\u30c8\u540d&#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;Apartment::Elevators::FirstSubdomain&#039;<\/code><\/pre>\n<pre><code>Apartment::Elevators::FirstSubdomain.excluded_subdomains = [&#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>Apartment::Elevators::Subdomain.excluded_subdomains = [&quot;public&quot;\u3001&quot;www&quot;\u3001\u304a\u3088\u3073 &quot;admin&quot; ]<\/code><\/pre>\n<p>\u5b8c\u5168\u306a\u30db\u30b9\u30c8\u306b\u57fa\u3065\u3044\u3066\u5207\u308a\u66ff\u3048\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u6b21\u306e\u69cb\u6210\u884c\u3092\u4f7f\u7528\u3057\u3066\u3001\u30cf\u30c3\u30b7\u30e5\u5185\u306e\u5bfe\u5fdc\u3059\u308b\u30c6\u30ca\u30f3\u30c8\u540d\u3092\u898b\u3064\u3051\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u884c\u3092 application.rb \u306b\u8ffd\u52a0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<pre><code>config.middleware.use &#039;Apartment::Elevators::HostHash&#039;, {&#039;example.com&#039; =&gt; &#039;example_tenant&#039;}<\/code><\/pre>\n<p><strong>\u30c6\u30ca\u30f3\u30c8\u3092\u524a\u9664\u3057\u307e\u3059\u3002<\/strong><\/p>\n<p>\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30c6\u30ca\u30f3\u30c8\u3092\u524a\u9664\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre><code>\u30a2\u30d1\u30fc\u30c8\u30e1\u30f3\u30c8::\u30c6\u30ca\u30f3\u30c8.drop(&#039;\u30c6\u30ca\u30f3\u30c8\u540d&#039;)<\/code><\/pre>\n<p>\u3055\u3089\u306b\u591a\u304f\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u898b\u3064\u3051\u308b\u306b\u306f\u3001gem \u516c\u5f0f\u30ea\u30bd\u30fc\u30b9\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002&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\">\u6700\u65b0\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u8cfc\u8aad\u3059\u308b<\/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=\"\u30ed\u30fc\u30c0\"><\/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=\"\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\">\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=\"\u540d\u524d\">\r\n<\/p>\r\n<p>\r\n    <input type=\"submit\" id=\"invisible\" class=\"sib-default-btn\" value=\"\u8cfc\u8aad\u3059\u308b\">\r\n<\/p>\t\t\t\t<\/div>\n\t\t\t<input type=\"hidden\" name=\"trp-form-language\" value=\"ja\"\/><\/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\">\u95a2\u9023\u8a18\u4e8b<\/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=\"\u30ab\u30df\u30ca\u30ea\u30b8\u30a7\u30e0\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e6%8a%80%e8%a1%93%e8%ab%96%e6%96%87\/%e3%82%ab%e3%83%9f%e3%83%8a%e3%83%aa%e3%82%b8%e3%82%a7%e3%83%a0\/?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=\"\u30ab\u30df\u30ca\u30ea\u30b8\u30a7\u30e0\" 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=\"\u30ab\u30df\u30ca\u30ea\u30b8\u30a7\u30e0\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e6%8a%80%e8%a1%93%e8%ab%96%e6%96%87\/%e3%82%ab%e3%83%9f%e3%83%8a%e3%83%aa%e3%82%b8%e3%82%a7%e3%83%a0\/?related_post_from=37277\">\r\n        \u30ab\u30df\u30ca\u30ea\u30b8\u30a7\u30e0  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"\u306a\u305c2026\u5e74\u306bRuby on Rails\u958b\u767a\u8005\u3092\u96c7\u3046\u306e\u304b\uff1f\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e3%83%ad%e3%83%bc\/why-to-hire-ruby-on-rails-developers\/?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=\"2022 \u5e74\u306b Ruby on Rails \u958b\u767a\u8005\u3092\u96c7\u7528\u3059\u308b\u7406\u7531\" 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=\"\u306a\u305c2026\u5e74\u306bRuby on Rails\u958b\u767a\u8005\u3092\u96c7\u3046\u306e\u304b\uff1f\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e3%83%ad%e3%83%bc\/why-to-hire-ruby-on-rails-developers\/?related_post_from=30627\">\r\n        \u306a\u305c2026\u5e74\u306bRuby on Rails\u958b\u767a\u8005\u3092\u96c7\u3046\u306e\u304b\uff1f  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306b\u304a\u3051\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u91cd\u8981\u6027\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e3%83%ad%e3%83%bc\/%e3%82%a8%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%97%e3%83%a9%e3%82%a4%e3%82%ba%e3%83%bb%e3%82%bd%e3%83%95%e3%83%88%e3%82%a6%e3%82%a7%e3%82%a2%e9%96%8b%e7%99%ba%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8b%e3%82%bd\/?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=\"\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306b\u304a\u3051\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u91cd\u8981\u6027\" 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=\"\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306b\u304a\u3051\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u91cd\u8981\u6027\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e3%83%ad%e3%83%bc\/%e3%82%a8%e3%83%b3%e3%82%bf%e3%83%bc%e3%83%97%e3%83%a9%e3%82%a4%e3%82%ba%e3%83%bb%e3%82%bd%e3%83%95%e3%83%88%e3%82%a6%e3%82%a7%e3%82%a2%e9%96%8b%e7%99%ba%e3%81%ab%e3%81%8a%e3%81%91%e3%82%8b%e3%82%bd\/?related_post_from=36250\">\r\n        \u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba \u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306b\u304a\u3051\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306e\u91cd\u8981\u6027  <\/a>\r\n\r\n        <\/div>\r\n              <div class=\"item\">\r\n            <div class=\"thumb post_thumb\">\r\n    <a  title=\"Ruby IDE: Ruby on Rails \u958b\u767a\u306b\u6700\u9069\u306a IDE\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e3%83%ad%e3%83%bc\/ruby-ide-ruby-on-rails-%e9%96%8b%e7%99%ba%e3%81%ab%e6%9c%80%e9%81%a9%e3%81%aa%e3%82%a2%e3%82%a4%e3%83%87%e3%82%a2\/?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=\"Ruby on Rails \u958b\u767a\u306b\u6700\u9069\u306a\u30a2\u30a4\u30c7\u30a2\" 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: Ruby on Rails \u958b\u767a\u306b\u6700\u9069\u306a IDE\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/%e3%83%ad%e3%83%bc\/ruby-ide-ruby-on-rails-%e9%96%8b%e7%99%ba%e3%81%ab%e6%9c%80%e9%81%a9%e3%81%aa%e3%82%a2%e3%82%a4%e3%83%87%e3%82%a2\/?related_post_from=36125\">\r\n        Ruby IDE: Ruby on Rails \u958b\u767a\u306b\u6700\u9069\u306a IDE  <\/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>\u307e\u305a\u30b7\u30f3\u30b0\u30eb \u30c6\u30ca\u30f3\u30c8\u3068\u30de\u30eb\u30c1 \u30c6\u30ca\u30f3\u30c8\u306e\u9055\u3044\u3092\u7406\u89e3\u3057\u307e\u3057\u3087\u3046\u3002 \u30b7\u30f3\u30b0\u30eb \u30c6\u30ca\u30f3\u30c8: \u3059\u3079\u3066\u306e\u9867\u5ba2\u306f\u72ec\u81ea\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3001\u72ec\u81ea\u306e DB \u3092\u6301\u3061\u3001\u305d\u308c\u306f 1 \u4eba\u306e\u9867\u5ba2\u306e\u307f\u306b\u30b5\u30fc\u30d3\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306f\u72ec\u7acb\u3057\u3066\u3044\u308b\u305f\u3081\u3001\u7279\u5b9a\u306e\u9867\u5ba2\u8981\u4ef6\u3092\u6e80\u305f\u3059\u3088\u3046\u306b\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3059\u3002\u30de\u30eb\u30c1\u30c6\u30ca\u30f3\u30c8: \u3053\u306e\u5834\u5408\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2 \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5358\u4e00\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u8907\u6570\u306e\u9867\u5ba2\u306b\u30b5\u30fc\u30d3\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u5404\u9867\u5ba2\u3092\u30c6\u30ca\u30f3\u30c8\u3068\u547c\u3073\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001UI \u30eb\u30fc\u30eb\u3068\u30d3\u30b8\u30cd\u30b9 \u30eb\u30fc\u30eb\u3092\u5909\u66f4\u3067\u304d\u307e\u3059\u304c\u3001\u540c\u3058\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u304c\u8907\u6570\u306e\u9867\u5ba2\u306b\u3088\u3063\u3066\u5171\u6709\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3 \u30b3\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u958b\u767a\u8cbb\u3084\u4fdd\u5b88\u8cbb\u3092\u304a\u5ba2\u69d8\u3067\u5206\u62c5\u3059\u308b\u305f\u3081\u7d4c\u6e08\u7684\u3067\u3059\u3002\u305f\u3060\u3057\u3001\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306f\u6b21\u306e\u65b9\u6cd5\u3067\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059...<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/www.railscarma.com\/ja\/%e3%83%96%e3%83%ad%e3%82%b0\/ruby-regex-match-guide-with-examples\/\"> <span class=\"screen-reader-text\">Ruby\u6b63\u898f\u8868\u73fe\u30de\u30c3\u30c1\u30ac\u30a4\u30c9\uff082026\uff09\u4f8b\u4ed8\u304d<\/span> \u3082\u3063\u3068\u8aad\u3080 \"<\/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\" \/>\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\/ja\/\u30d6\u30ed\u30b0\/\u6280\u8853\u8ad6\u6587\/multi-tenancy-using-apartment-gem\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\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\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.railscarma.com\/ja\/\u30d6\u30ed\u30b0\/\u6280\u8853\u8ad6\u6587\/multi-tenancy-using-apartment-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=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\u5206\" \/>\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\":\"ja\",\"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\",\"breadcrumb\":{\"@id\":\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@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\":\"ja\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.railscarma.com\/#organization\",\"name\":\"RailsCarma\",\"url\":\"https:\/\/www.railscarma.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@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\":\"ja\",\"@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 by using apartment gem - RailsCarma - Ruby on Rails Development Company specializing in Offshore Development","description":"Let us first understand the difference between single and multi-tenancy Single","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\/ja\/\u30d6\u30ed\u30b0\/\u6280\u8853\u8ad6\u6587\/multi-tenancy-using-apartment-gem\/","og_locale":"ja_JP","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","og_url":"https:\/\/www.railscarma.com\/ja\/\u30d6\u30ed\u30b0\/\u6280\u8853\u8ad6\u6587\/multi-tenancy-using-apartment-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":{"\u57f7\u7b46\u8005":"admin","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"4\u5206"},"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":"ja","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","breadcrumb":{"@id":"https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.railscarma.com\/blog\/technical-articles\/multi-tenancy-using-apartment-gem\/"]}]},{"@type":"ImageObject","inLanguage":"ja","@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 - \u30aa\u30d5\u30b7\u30e7\u30a2\u958b\u767a\u306b\u7279\u5316\u3057\u305f Ruby on Rails \u958b\u767a\u4f1a\u793e","description":"RailsCarma \u306f\u30d0\u30f3\u30ac\u30ed\u30fc\u30eb\u306e Ruby on Rails \u958b\u767a\u4f1a\u793e\u3067\u3059\u3002\u5f53\u793e\u306f\u7c73\u56fd\u3068\u30a4\u30f3\u30c9\u3092\u62e0\u70b9\u3068\u3059\u308b\u30aa\u30d5\u30b7\u30e7\u30a2 Ruby on Rails \u958b\u767a\u3092\u5c02\u9580\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u7d4c\u9a13\u8c4a\u5bcc\u306a Ruby on Rails \u958b\u767a\u8005\u3092\u96c7\u3063\u3066\u3001\u7a76\u6975\u306e Web \u30a8\u30af\u30b9\u30da\u30ea\u30a8\u30f3\u30b9\u3092\u5b9f\u73fe\u3057\u307e\u3057\u3087\u3046\u3002","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":"ja"},{"@type":"Organization","@id":"https:\/\/www.railscarma.com\/#organization","name":"\u30ec\u30fc\u30eb\u30ab\u30fc\u30de","url":"https:\/\/www.railscarma.com\/","logo":{"@type":"ImageObject","inLanguage":"ja","@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":"\u7ba1\u7406\u8005","image":{"@type":"ImageObject","inLanguage":"ja","@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\/ja\/wp-json\/wp\/v2\/posts\/26431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/comments?post=26431"}],"version-history":[{"count":0,"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/posts\/26431\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/media\/31798"}],"wp:attachment":[{"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/media?parent=26431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/categories?post=26431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.railscarma.com\/ja\/wp-json\/wp\/v2\/tags?post=26431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}