Rails多租户应用程序

时间:2018-03-20 09:52:30

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

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

2 个答案:

答案 0 :(得分:0)

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>

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

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

答案 1 :(得分:0)

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
相关问题