/ / Найкраще місце для ініціалізації монгоїда в коштовності з рубіном - ruby, mongodb, rubygems, mongoid

Найкраще місце для ініціалізації монгоіду в рубіновому перлині - рубінові, монгодби, рубігемів, монгодів

Я будую коштовний камінь з рубіну, який вимагатимеспілкування з 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 як залежність.

Камені не повинні бути нав'язливими, а конфігурація повинна бути очевидною, керованою та добре зафіксованою.