Buduję rubinowy klejnot, który będzie wymagałkomunikacja z MongoDB. Używam Mongoid jako mojego sterownika klienta i jestem ciekawy, jaka jest najlepsza praktyka, jeśli chodzi o inicjowanie w kontekście rubinowego klejnotu. Muszę uruchomić gdzieś odpowiednie:
Mongoid.load!("path/to/your/mongoid.yml", :production)
Pytanie brzmi: gdzie najlepiej jest to zrobić w rubinowym klejnocie, aby upewnić się, że moje połączenie MongoDB jest dostępne w całym kodzie?
Odpowiedzi:
0 dla odpowiedzi № 1Moim zdaniem najlepszą praktyką jest to, że wcale tego nie robisz.
Co się stanie, jeśli konsumenci twojego rubygem sąjuż korzystasz z Mongoid w innych aplikacjach? Nie ma dla ciebie sensu (z poziomu zależności, której używają rubygem) zainicjowanie dodatkowej sesji klienta / sesji mongoid, kiedy można użyć już istniejącej.
Pozwolę użytkownikom zarządzać własnym połączeniem i zbudować bibliotekę, aby wiedziała, jak się skonfigurować, pod warunkiem, że dostarczy działające połączenie z bazą danych.
Na przykład możesz zrobić coś takiego:
# for rails apps, in config/initializers
YourGem.configure do |config|
config.client = mongoid_client_instance
end
# for use outside rails
my_instance = YourGem.new(mongoid_client_instance)
W takich przypadkach najlepiej unikać zakładania, w jaki sposób chcą inicjować zależności zewnętrzne lub wymuszać na nich jakiekolwiek decyzje.
0 dla odpowiedzi nr 2
Po prostu udokumentowałbym informacje o konfiguracji w twoim Gem / Repository i dodałbym Mongoid do twojego .gemspec jako zależność.
Klejnoty nie powinny być uciążliwe, a konfiguracja powinna być oczywista, łatwa do zarządzania i dobrze udokumentowana.