2011-06-10 2 views
0

몇 가지 이상한 문제가 있습니다 (설명 할 아주 이상한 사용 사례). 필자는 데이터 멀티 테넌시 (multi-tenancy)를 위해 postgres 스키마를 사용하여 멀티 테넌트 (multi-tenant) 애플리케이션을 설정하고 있습니다.루비로드 파일 async?

내 시스템의 각 company에는 자체 스키마가 제공됩니다. 이 작업을 수행하는 방법은 모델의 after_commit을 사용하여 작성한 다음 새 postgres 스키마를 만들고이를 schema.rb에로드합니다. (rake db:schema:load 코드에서 복사) 루비 load을 사용합니다.

당신은이 모든 (콘솔에서) 작동, 어쨌든 보석 here

을 볼 수 있습니다. 회사를 만드는 것은 새로운 스키마를 만들고 그 스키마로 전환 할 수 있습니다. 내 문제는 통합 테스트에 있습니다.

before do 
    @c1 = Factory :company 
    @c2 = Factory :company 
end 

어떤 이상한 것은 제가 DB 스키마 로딩에 대한 로그를 얻기 위해 시작하지만 그들은 잘 리기 때문이다 : 그래서 같은 회사로 만드는 RSpec에 시험이 있습니다. 마치 그들이 평행하게 일어나고있는 것처럼. 다음은 샘플 출력입니다 :

>> create: database: unique_name1 
-- create_table("first_table_in_schema_rb", {:force=>true}) 
>> create: database: unique_name2 

create: database 내 로그 라인의 -- create_tableschema.rb 자체입니다.

두 번째 create: database은 첫 번째 회사 생성에서 schema.rb을로드하는 동안 발생하는 것으로 보입니다.

load이 비동기인지 알 수 있습니까? 나는 루비가 진짜 실을 가지고 있지 않다는 것을 알고 있지만, 섬유를 사용하고 있을까? 내 테스트가 돌아 왔을 때 만들어지기로되어있는 포스트그레스 스키마가 존재하지 않는 것 때문에 이것은 정말로 나를 망쳐 놓고있다. loadrequire하지만에 어떤 일이 발생하는지에 대해 확인 메신저, 일이 있기 때문에 필요 한 번 나에게 발생하기 때문에 반드시

레일 3.0.8
루비 1.9.2

답변

0

임 100 %이 문제입니다 require는 원자가 아니므로 require를 사용하여 파일의 코드를로드하면 경쟁 조건이 발생합니다. 어쩌면 그게 무슨 일이 일어나고로드와 함께하지만 난로드에 대한 정보를 찾을 수 없습니다 원자 또는되지 않았습니다.

0

은 신경 끄시 고 ... 문제는 schema.rb

사실 예외가 조용히 어딘가

를 잡혔다 발생되고 있었다 가져올 때 난 이미 wrong schema에 연결되었다는 사실이었다 load와는 아무 상관이 없었다