10

this article 다음에 멀티 테넌트 애플리케이션을 개발 중입니다. 문제는 처음으로 모든 마이그레이션을 실행할 때입니다. schema.rb 파일에는 공용 스키마에 대한 테이블 만 있지만 다른 스키마에는 어떤 것이 있습니까? 다른 구조를 가진 다른 스키마를 어떻게 만들 수 있습니까? public 나는 보석을 사용하고 싶지 않습니다. 레일즈에서 Postgres 다중 스키마 데이터베이스 사용

표 아래의 예는

class CreatePerspectives < ActiveRecord::Migration 
    include MultiSchema 
    def up 
     with_in_schemas :only => :public do 
     # Create table perspectives 
     end 
    end 


    def down 
    with_in_schemas :only => :public do 
     drop_table :prespectives 
    end 
    end 
end 

표가 개인 스키마

class CreateObjectives < ActiveRecord::Migration 

    include MultiSchema 

    def change 
    with_in_schemas :except => :public do 
     # Create objectives table 
    end 
    end 
end 

schema.rb

생성되는 공공 스키마 생성을 참조하십시오
ActiveRecord::Schema.define(version: 20130810172443) do 

    create_table "perspectives", force: true do |t| 
    t.string "name" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 
end 
+0

왜 여러 스키마가 필요한지 이해가 가지 않습니다. 하나만 사용하고 사용자의 역할에 따라 특정 정보에 액세스 할 수 없습니까? –

+0

필자는 Postgres를 오랫동안 사용 해왔고 사랑해 왔으며 스키마와 그 사용법을 잘 알고 있습니다. 저는 Rails 개발자입니다. 즉, 내가하지 않으면 두 가지를 함께 사용하지 않을 것입니다. 당신은 필요가 없습니다. 단순히 데이터 레이아웃을 디자인하십시오 (일반적으로 이것을 "스키마"라고 부르지 만 문제를 혼동하고 싶지는 않습니다). "회사"또는 다른 레코드를 소유 한 테이블을 추가하십시오. 그런 다음 여러 테이블에서 소유권을 부여하십시오. 나는이 같은 몇 가지 애플 리케이션을 가지고 있으며 어렵지 않습니다. –

답변

1

아파트 보석을 알고 계십니까? https://github.com/influitive/apartment

저는 올해 프로젝트에서 postgresql로 다중 스키마를 지원했습니다. 모든 것이 문서화되고 사용하기 쉽습니다. 그리고 미들웨어 모드를 선택할 수 있습니다. 예를 들어 customer.applicationdomain.com 도메인에 액세스하면 애플리케이션에서 올바른 스키마를 선택할 수 있습니다. 그런데 sidekiq와 함께 백그라운드 작업을 사용할 수도 있습니다.

+0

질문은 특히 보석은 옵션이 아니라고 말합니다. – Djizeus

관련 문제