【问题标题】:Rails Multi tenant ApplicationRails 多租户应用程序
【发布时间】:2018-08-29 01:52:08
【问题描述】:

我正在为不同的俱乐部创建一个多租户 Rails 应用程序。我正在使用公寓 gem,因此它为每个拥有 100 多张桌子的俱乐部创建了不同的数据库。现在我想转储一个租户并将其导入其他俱乐部租户

【问题讨论】:

  • 看起来像一个意图。那么你的问题是什么?
  • 您希望我们如何为您做这件事?

标签: ruby-on-rails ruby multi-tenant


【解决方案1】:
using this way but not saving in new tenant    
Apartment::Tenant.switch("tenant1")
        members= Member.all
        Apartment::Tenant.switch("tenant2")
        members.each do |member|
          begin
            member.save
            puts "migrating member.id"
          rescue=>e
            puts e
          end
        end

【讨论】:

  • 这不是答案。可以将其添加到您的问题中。
  • 您的新租户是否已正确创建?使用开关!而不是切换您的 rake 任务以确保租户存在。
【解决方案2】:

Apartment gem 为不同的 Tenenats 而不是数据库创建不同的架构。您可以检查差异here

对于您的情况,您可以使用以下命令复制一个模式的记录:

pg_dump -U <username> -p <port> -n <source> <database name> >> <dump filename>

source 是您的源模式名称。这是您要复制的主要租户。

target 是您要复制所有记录的架构。

通过在任何编辑器中打开来更改新转储文件中的架构名称。

# edit the dump.file

CREATE SCHEMA <source>; => CREATE SCHEMA <target>;
ALTER SCHEMA <source> OWNER TO <username>; => ALTER SCHEMA <target> OWNER TO <username>; 

现在恢复新的转储文件。

psql -U <username> -p <port> -d <database> -f <dump filename>

您可以通过创建 rake 任务并切换租户来将数据从一个租户复制到另一个租户。

Apartment::Tenant.switch!("one tenant")

# Retrive data that you want in a local object
# local_object = Model.all

Apartment::Tenant.switch!("second tenant")

# Save all data in second tenant from local_oject
# local_oject.each do |object|
#   object.save
# end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 2011-05-05
    • 2015-08-17
    相关资源
    最近更新 更多