2017-04-27 8 views
0

내 응용 프로그램은 postgres 스키마를 사용하여 멀티 테넌시를 구현합니다. users 같은 테이블에 대한 그래서, 각 세입자는 실제로는 자신의 users 테이블의 한 -멀티 테넌트 설정이있는 시계 작업

  • public.users (기본값) 보조 노트로
  • foo.users
  • bar.users
  • ...

, apartment gem

을 사용하여 멀티 테넌시를 구현합니다.

clockwork gem을 사용하면 sync_database_events 메소드를 사용하여 데이터베이스 테이블에서 이벤트를 읽을 수 있습니다. 기본적으로

sync_database_events model: ScheduledJob, every: 1.minute do |model_instance| 
    rake model_instance.name 
end 

이이 public.scheduled_jobs에서 읽지 만 내 스키마 각각은에서 읽을 scheduled_jobs 자신의 것입니다 : 예를 들어, 그것은 scheduled_jobs 테이블/모델에서 이벤트를 읽을 수 있습니다.

내 모든 세입자를 순환시키는 편리한 방법이 있습니까?

답변

0

저는 Postgres가 아닌 Apartment와 MySQL을 사용하는 것과 비슷한 점이 있습니다. 아파트는 매우 강력하지만 기껏해야 저조한 것으로 기록됩니다.

if Rails.env.development? 
    every(1.day, '3am.job -- Daily Job', :at => '03:00') do |job| 
    User.delay.crawl 
    Search.delay.crawl 
    end 
elsif Rails.env.production? 
    every(1.day, '3am.job -- Daily Job', :at => '03:00') do |job| 
    SiteApi.usernames.each do |username| 
     Apartment::Tenant.switch!(username) 
     User.delay.crawl 
     Search.delay.crawl   
    end 
    end 
end 

마법 내 Rails.env.production에서 발생 :이 접근 방법은 다음이었다? 블록. SiteApi는 사용자의 마스터 데이터베이스와 대화하고 사용자 이름 배열을 가져 오는 API입니다. 그런 다음 Apartment :: Tenant.switch! (사용자 이름)를 호출하여 임차 컨텍스트를 올바른 사용자로 전환합니다. 그런 다음 각 임차인에게 필요한 기능을 호출합니다.

지연에 대해서는 Apartment Sidekiq 확장을 사용하고 있음에 유의하십시오.

나는이 개념적 도약이 당신이 찾고있는 것으로 의심합니다.