Wiele baz danych

Witam serdecznie,

chciałbym się was poradzić odnośnie uzywania aplikacji railsowej z wieloma bazami danych.
Mam 5 serwisów, które wymagają logowania / rejestracj itp - uzyłem do tego celów gemu devise, przyszła potrzeba by uzytkownik zapisany w jedynm serwisie jednocześnie był uzytkownikiem drugiego serwisu. Wpadłem na pomysł że mozna by bylo tabele users i pochodne wrzucic do innej bazy a serwisy mogly by uzywac innego polaczenia do bazy np. przy wyciaganiu usera zas przy innych operacjach standardowego. Moje pytanie brzmi czy to ma sens jeśli tak to jak pogodzić to w railsach, jeśli nie ma sensu to jakie proponujecie inne rozwiązanie ?

Jest to możliwe, ale ma pewne konkretne wady(które czasami mogę być zaletami). Najpierw jak: kluczem jest tu metoda establish_connection oras zmienna klasowa abstract_class
Definiujemy najpierw klasy odpowiadające za połączenia

development:
  adapter: sqlite
  database db/dev.sqlite
user_development:
  adapter: sqlite
  database: db/user_dev.sqlite

[code]class UserConnection < ActiveRecord::Base
self.abstract_class = true
establish_connection “user_#{Rails.env}” # user_developmenr user_production etc.
end

class ModelConnection < ActiveRecord::Base
self.abstract_class = true
establish_connection Rails.env
end[/code]
W ten sposób ustanawiamy dokładnie 3 połączenia, (z tym że będziemy używać 2), teraz każdy model w bazie A dziedziczy z UserConnection a każdy model z bazy B dziedziczy z ModelConenction i wszystko bangla.

Wady:
a) transakcje nie działają tak jakbyś się spodziewał.
b) rekord A może zostać zapisany do bazy A, po czym powiązany rekord B rzuci wyjątek przy zapisywaniu, jak będą w jednej bazie A nie zostanie zapisany, gdy będą w 2 bazach, tak nie będzie - rekord A zostanie zapisany mimo że ActiveRecord będzie myślał że nie został.
c) Nie będą działać join-y (ale będą działać includes)
d) kilka dziwnych błędów, czasami relacje pomiędzy połączeniami zachowują się zabawnie.

Zalety - właściwie tylko jedna - wadę (b) możemy wykorzystać do logowania do bazy danych. Dla modelu logującego ustalamy osobne połączenie - i wtedy nawet jeżeli w trakcie transakcji pójdzie rollback, dane zostaną zapisane do logów, mimo że w połączeniu głównym transakcja została wycofana.

PS. Rozpisałem się jak głupi, a potrzeba ci łatwego rozwiązania - ustaw tą samą sesję dla wszystkich - najlepiej https://www.google.pl/search?q=Devise+single+sign+on

Jest kilka gotowych rozwiązań z kategori Single Sign-On (dobra fraza do gugla), zdaje się że Devise ma rozszerzenia do kilku z nich. Ewentualnie OpenID.

Dzięki za obszerną odpowiedź dała mi ona jakąś wiedzę na ten temat.
Na tą chwile faktycznie starczy mi Single Sign On.
Thx