Sto lavorando a un'applicazione di binari multi-tenant utilizzando gli schemi PostgreSQL per diversi client. Le migrazioni delle rotaie non funzionano con schemi multipli, quindi ho eseguito la seguente attività di rake per migrare tutti gli schemi e sembra funzionare. La mia domanda è se altri hanno implementato soluzioni migliori e più eleganti. Sarei anche molto contento di un buon tutorial che includa esempi di codice di rotaia per PostgreSQL che utilizza più schemi. Finora ho trovato solo una buona presentazione sul tema http://aac2009.confreaks.com/06-feb-2009-14-30-writing-multi-tenant-applications-in-rails-guy-naor.html e un esempio di quello che sto puntando tomayko.com/writings/rails-multiple-connectionsMigrazioni di rotaie per gli schemi PostgreSQL
desc 'Migrates all postgres schemas'
task :schemas do
# get all schemas
env = "#{RAILS_ENV}"
config = YAML::load(File.open('config/database.yml'))
ActiveRecord::Base.establish_connection(config[env])
schemas = ActiveRecord::Base.connection.select_values("select * from pg_namespace where nspname != 'information_schema' AND nspname NOT LIKE 'pg%'")
puts "Migrate schemas: #{schemas.inspect}"
# migrate each schema
schemas.each do |schema|
puts "Migrate schema: #{schema}"
config = YAML::load(File.open('config/database.yml'))
config[env]["schema_search_path"] = schema
ActiveRecord::Base.establish_connection(config[env])
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Migrator.migrate('db/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
end
end
Liquibase funziona con gli schemi per quanto ne so – Janning
@Janning Liquibase non è una soluzione che funziona con il modle ActiveRecord utilizzato da rails. – lillq