ruby-on-rails - Rails 中的子域域管理

标签 ruby-on-rails ruby ruby-on-rails-4 routing subdomain

现在我有一个应用程序,其中包含很多东西,例如狂欢、炼油厂、论坛和许多其他 gem 。所以我需要为用户克隆这个应用程序,并为每个用户创建一个子域。就像 user1.mydomain.com 一样,这导致我的应用程序克隆只有这个克隆的专用数据库。所以现在我只是复制和粘贴文件夹,但这是一个非常非常糟糕的做法,我遇到了很多问题。所以我的问题是。我该如何实现?或者可能是特殊的 gem 来解决我的麻烦?

最佳答案

with dedicated db only for this clone

这是一个叫做 multi tenancy 的东西- true Multi-Tenancy 是您拥有多个数据库的地方 - 一个用于运行一个应用程序实例的每个用户。

这对于 Rails 来说是一个非常技术性的问题,因为以前没有这样做过。

有 gem -比如Apartment - 允许使用 PGSQL scoping 的一些 Multi-Tenancy 功能.关于这个有一个 Railscast here :

enter image description here

这只适用于 Postgres。如果您使用的是 MYSQL,则每次注册新用户时都必须创建一种方法来加载、填充和引用各个表。绝非易事。


make a clone of this app for for users and make a sub domain for each

您不是克隆应用;您需要使用一个应用程序实例,然后将其与多个数据孤岛一起使用。

还有一个很棒的Railscast about the subdomains here :

enter image description here

就子域而言,您必须构建流程来处理不同的用户实例:

#config/routes.rb
root "application#index"
constraints: Subdomain do
    resources :posts, path: "" #-> user1.domain.com/ -> posts#index
end


#lib/subdomain.rb
class Subdomain
   def matches?(request)
     @users.exists? request.subdomain #-> would have to use friendly_id
   end
end

#app/controllers/application_controller.rb
class ApplicationController < ApplicationController
   def index
       # "welcome" page for entire app
       # include logic to determine whether use logged in. If so, redirect to subdomain using route URL
   end
end

#app/controllers/posts_controller.rb
class PostsController < ApplicationController
   before_action :set_user #-> also have to authenticate here

   def index
      @posts = @user.posts
   end

   private 

   def set_user
      @user = User.find request.subdomain
   end
end

这将使您能够拥有一个“欢迎”页面、管理用户登录,然后拥有一个中央“用户”区域,他们可以在其中查看其子域中的帖子等。

关于ruby-on-rails - Rails 中的子域域管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33013901/

相关文章:

ruby-on-rails - 如何使用kubernetes将Rails应用程序部署到Google容器引擎?

ruby-on-rails - 我在部署 Rails 4 "Execute deploy:assets:backup_manifest target ` <dir>/assets_manifest_backup' 不是目录期间收到此消息”

ruby-on-rails - Ubuntu、Ruby、Ruby on Rails 安装问题(无法访问 localhost :3000)

ruby-on-rails - Ruby on rails,多次检查 nil 属性

ruby - .irbrc 在安装 RBEnv 后不执行

ruby - 无法使用 RVM 安装 ruby​​ 1.9.3。似乎是某种类型的 git 错误

ruby-on-rails - rails : How to store date in "Chennai" Timezone in the database

ruby-on-rails - 如何向 Rails 范围添加多个条件?

ruby-on-rails - 按返回整数的模型方法进行扫描排序

ruby-on-rails - rails dynamic where sql 查询