2016-11-23 2 views
1

Предположим, мне нужно проанализировать некоторую конфигурацию, чтобы инициировать некоторые сервисные синглеты (которые можно использовать с Rails или без них).Rails reload! сбрасывает переменные класса, необходимо перезапустить некоторые инициализаторы

Пример из Пример кода:

#services/my_service.rb 
module MyService 
    @config = nil 

    def self.load_config(config) 
     @config = config 
    end 

При использовании с железнодорожным транспортом (или Capistrano, Синатра, и т.д.) Я хотел бы использовать инициализатор для загрузки сервиса через

#initializers/svc.rb 
MyService.load_config(Rails.application.secrets.my_service.credentials) 

Но когда специально используется с Rails, на каждой консоли rails restart!, эта переменная @config очищается, что является проблемой ...

Есть

  • after-reload! крючки, которые я мог бы использовать для повторного запуска инициализатора?
  • другие типы переменных, которые будут сохранены во время restart! , которые я мог бы использовать здесь?
+0

Это старый вопрос, но поскольку есть новые читатели: после перезапуска и т. Д., В ActiveSupport доступны следующие блоки: Перезагрузка из Rails 5. См. Документ http://www.rubydoc.info/gems/activesupport/ ActiveSupport/Reloader –

ответ

0

Вы можете определить метод конфигурации, как:

def config @config ||= Rails.application.secrets.my_service.credentials end

И этот метод вызывается вместо @config, поэтому, когда переменная конфигурации не установлен, он будет установлен снова, в противном случае она возвращает значение ,

+0

Проблема в том, что вы соединяете реализацию с Rails-инфраструктурой. Я разделился на инициализатор (который просто предоставляет учетные данные) и сам сервис, потому что служба может использоваться вне Rails, и это было задание инициализатора передавать в секретах Rails. Я добавлю это на свой вопрос и с тегом Ruby –

+0

Это правда. Как насчет использования файла yaml вместо секретов? Вы избежите связывания логики между каркасом и ключами. (Я думаю, что ваша проблема не очень распространенная проблема ха-ха) –

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