2015-07-30 3 views
2

У меня есть следующие строки в моем Синатра приложение:Initializing Mongoid без .load()

Mongoid.load!('./config/database/mongoid.yml')

Это хорошо, но я не хочу, чтобы мои данные соединения в файле YAML, и добавьте его в .gitignore. Я хочу сохранить их в ENV.

я смог обойти это в прошлом, добавляя такие вещи, как username: <%= ENV['MONGODB_USER'] %> в конфигурационный файл YAML, а затем читать его, как Еврорадио, сохранив его и читать его снова с Mongoid.load! перед тем Heroku вытер диск. Излишне говорить, что это довольно орехово.

Все, что я мог найти, это определение .load!over here, и это не похоже, что есть какой-либо путь вокруг этого.

Есть ли скрытый способ программно настроить соединения Mongoid?

Заранее спасибо.

+0

это все рельсы тоже, он просто разбирает файл 'database.yml' в'/config' – Anthony

+1

Это хорошо, но я все равно хочу отправить приложение без каких-либо файлов конфигурации базы данных и просто использовать 'ENV'. Mumble mumble 12-factor apps –

ответ

2

Mongoid.load! не делает очень много:

def load!(path, environment = nil) 
    settings = Environment.load_yaml(path, environment) 
    if settings.present? 
    Sessions.disconnect 
    Sessions.clear 
    load_configuration(settings) 
    end 
    settings 
end 

Все это делает немного бухгалтерии, загружает YAML, и руки прочь load_configuration делать тяжелую работу. Ничто не мешает вам построить хакс вручную и вызывать Mongoid.load_configuration.

+1

Чтобы добавить немного дополнительной ясности в этот ответ, вам понадобится нечто вроде этого: Mongoid.load_configuration (clients: {default: {database: database, hosts: [host]}}) '. Обратите внимание, что 'load_configuration' принимает конфигурацию без среды верхнего уровня. –

+0

@MatSchaffer: Вы хотите добавить это как еще один ответ? Похоже, это полезное дополнение для меня. –

+0

Хороший звонок. Готово! –

3

Опираясь на mu's answer:

Вы можете дать Mongoid хэш использовать для инициализации, как это:

Mongoid.load_configuration(clients: { 
    default: { 
    database: database, 
    hosts: [ host ] 
    } 
}) 

Обратите внимание, что хэш вы передаете load_configuration не ожидается начать с ключом окружающей среды, как вы обычно имели бы в mongoid.yml.

Смежные вопросы