Estoy trabajando en una aplicación de rieles multi-tenant usando esquemas PostgreSQL para diferentes clientes. Las migraciones de rieles no funcionan con varios esquemas listos para usar, por lo que realicé la siguiente tarea de rake para migrar todos los esquemas y parece que funciona. Mi pregunta es si otros han implementado soluciones mejores y más elegantes. También estaría muy contento con un buen tutorial que incluye ejemplos de código de rieles para PostgreSQL usando múltiples esquemas. Hasta ahora sólo he encontrado una buena presentación sobre el tema http://aac2009.confreaks.com/06-feb-2009-14-30-writing-multi-tenant-applications-in-rails-guy-naor.html y un ejemplo de lo que estoy apuntando para tomayko.com/writings/rails-multiple-connectionsMigraciones de carriles para esquemas 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 funciona con esquemas por lo que sé – Janning
@Janning Liquibase no es una solución que funcione con el modulo ActiveRecord que usa rails. – lillq