2

PostgreSQL でアパートメント gem を使用しており、データを含む既存のテナントのコピーを作成する必要があります。考えられる 1 つの方法は、テナントからすべてのデータを収集してから、テナントを切り替えてレコードの作成を開始することです。以下は小さなデモンストレーションです。モデルは、コピーされるモデルのリストです。

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

どんな助けでも大歓迎です。

4

1 に答える 1

1

デフォルトでは、Apartment はテナントごとに異なるスキーマを使用します。したがって、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>
于 2016-08-03T10:03:42.380 に答える