저는 다른 클라이언트를 위해 PostgreSQL 스키마를 사용하는 멀티 테넌트 레일 애플리케이션을 개발 중입니다. 레일즈 마이그레이션은 여러 개의 스키마를 즉시 사용할 수 없으므로 모든 스키마를 마이그레이션하기 위해 다음과 같은 레이크 작업을 수행했습니다. 내 질문은 다른 사람들이 더 훌륭하고 우아한 솔루션을 구현 한 것입니다. 또한 여러 스키마를 사용하는 PostgreSQL의 레일즈 코드 예제를 포함하여 좋은 자습서에 만족합니다. 지금까지 난 단지 주제 http://aac2009.confreaks.com/06-feb-2009-14-30-writing-multi-tenant-applications-in-rails-guy-naor.html에 좋은 프리젠 테이션 내가 tomayko.com/writings/rails-multiple-connections을 목표로하고있는 무슨의 예를 발견 내가있어 경우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는 제가 알고있는 한 스키마와 함께 작동합니다. – Janning
@ Janning Liquibase는 레일스가 사용하는 ActiveRecord 모듈과 호환되는 솔루션이 아닙니다. – lillq