Я будую коштовний камінь з рубіну, який вимагатимеспілкування з MongoDB. Я використовую Mongoid як свого драйвера клієнта, і мені цікаво, яка найкраща практика полягає у ініціалізації в контексті коштовного каменя. Мені потрібно запустити наступне десь доречно:
Mongoid.load!("path/to/your/mongoid.yml", :production)
Питання в тому, де найкраще це зробити в рубіновій дорогоцінній камені для того, щоб моє з'єднання MongoDB було доступним у всьому моєму коді?
Відповіді:
0 для відповіді № 1На мою думку, найкращою практикою є те, що ти взагалі цього не робиш.
Що станеться, якщо є користувачі вашої рубігемивже використовуєте Mongoid в іншому місці у своїй програмі? Вам не було б сенсу (зсередини залежності від rubygem, яку вони "використовують", щоб ініціалізувати додатковий сеанс клієнта / монгоїдний сеанс, коли ви можете використовувати існуючий.
Я б дозволю вашим користувачам керувати власним зв’язком і будувати вашу бібліотеку, щоб вона знала, як налаштувати себе за умови, що вона передала функціонуюче з'єднання з базою даних.
Наприклад, ви можете зробити щось подібне:
# 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)
У подібних випадках найкраще уникати припущень щодо того, як вони хочуть ініціалізувати зовнішні залежності або примушувати будь-які рішення щодо них.
0 для відповіді № 2
Я б просто задокументувати інформацію про налаштування у вашому Gem / Repository та додати Mongoid до вашого .gemspec як залежність.
Камені не повинні бути нав'язливими, а конфігурація повинна бути очевидною, керованою та добре зафіксованою.