在公寓宝石中复制租户

时间:2016-07-30 08:21:17

标签: ruby-on-rails ruby postgresql apartment-gem

我正在使用带有PostgreSQL的apartment gem,我需要使用数据制作已有租户的副本。我可以想到的一种方法是从租户收集所有数据,然后切换租户并开始创建记录。下面是一个小型演示。模型是要复制的模型列表。

Apartment::Tenant.switch!('destination')
models.each do |modal|
  eval("@#{modal.downcase} = #{modal}.all.collect{ |p| p.to_dh }")  
end
Apartment::Tenant.switch!('target')
models.each do |modal|
  eval("@#{modal.downcase}.each{ |p| #{modal}.create(p[:attributes], :without_protection => true) rescue p[:id]}")
end
models.each do |modal|
  ActiveRecord::Base.connection.reset_pk_sequence!(eval("#{modal}.table_name"))     
end

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

默认情况下,公寓为不同的租户使用不同的模式。 所以我会尝试通过pg_dump和psql复制模式。

pg_dump -U <username> -p <port> -n <source> <database name> >> <dump filename>
# 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>