У меня происходят некоторые странные проблемы (для очень странного варианта использования, как я объясню).Я настраиваю мультитенантное приложение, используя схемы postgres для мультитенантности данных.
Каждый company
в моей системе получит свою собственную схему.Я делаю это с помощью after_commit
на модели при создании, которая затем создает новую схему postgres и загружает в нее schema.rb
.(скопировано из rake db:schema:load
кода) с использованием ruby load
.
Вы можете увидеть камень здесь
В любом случае, все это работает (в консоли).Создание компании создает новую схему, и я могу переключиться на нее и т. Д. ... моя проблема заключается в моих интеграционных тестах.У меня есть тест rspec, который создается для таких компаний:
before do
@c1 = Factory :company
@c2 = Factory :company
end
Странно, что я начинаю получать журналы о загрузке схемы БД, но они усекаются.Как будто они происходят параллельно.Вот пример выходных данных:
>> create: database: unique_name1
-- create_table("first_table_in_schema_rb", {:force=>true})
>> create: database: unique_name2
create: database
- моя строка журнала, -- create_table
от schema.rb
.
Как видите, второй create: database
кажетсяпроизойдет, пока я загружаю schema.rb
из первого создания компании.
Кто-нибудь знает, является ли load
как-то асинхронным?Я знаю, что у ruby нет реальных нитей, но может ли это быть использование волокон или что-то?Это действительно меня запутывает, потому что когда приходит мой тест, схема postgres, которая должна была быть создана, кажется, не существует.
Rails 3.0.8
Ruby 1.9.2