Каков наилучший способ хранения конфигурации приложения в rails?

Мне нужно сохранить конкретную конфигурацию приложения в rails. Но это должно быть:--2-->

  • доступно в любом файле (Модель, Вид, помощники и контроллеры
  • среда указана (или нет), это означает, что каждая среда может перезаписать конфигурации, указанные в среде.rb

Я пытался использовать среду.RB и поставить что-то вроде

USE_USER_APP = true

это сработало для меня, но при попытке перезаписать его в определенной среде он не будет работать потому что производство.rb, например, кажется, находится внутри Rails: Initializer.запустить блок.

Так, кто?

6 ответов


Я помогал другу настроить решение, упомянутое Рикардо вчера. Мы немного взломали его, загрузив файл YAML с чем-то похожим на это (идя из памяти здесь):

require 'ostruct'
require 'yaml'
require 'erb'
#config = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/config.yml"))
config = OpenStruct.new(YAML.load(ERB.new(File.read("#{RAILS_ROOT}/config/config.yml")).result))
env_config = config.send(RAILS_ENV)
config.common.update(env_config) unless env_config.nil?
::AppConfig = OpenStruct.new(config.common)

Это позволило ему встроить код Ruby в конфигурацию, как в Rhtml:

development:
  path_to_something: <%= RAILS_ROOT %>/config/something.yml

посмотрите на Configatron:http://github.com/markbates/configatron/tree/master

Я еще не использовал его, но он активно развивает его сейчас и выглядит довольно красиво.


самое основное, что нужно сделать, это установить переменную класса из вашего окружения.рубидий. Я сделал это для Google Analytics. По сути, я хочу другой ключ в зависимости от того, в какой среде я нахожусь, поэтому разработка или постановка не искажают метрики.

вот как я это сделал.

на lib/analytics/google_analytics.rb:

module Analytics
  class GoogleAnalytics
    @@account_id = nil

    cattr_accessor :account_id
  end
end

а потом в environment.rb или environments/production.rb или любой другой файл среды:

Analytics::GoogleAnalytics.account_id = "xxxxxxxxx"

тогда везде, где вы ned для справки, скажите макет по умолчанию с помощью Google Analytics JavaScript, это вы просто называете Analytics::GoogleAnalytics.account_id.


Я нашел хороший способ здесь


использовать переменные среды. В Heroku использует это. Помните, что если вы сохраняете конфигурацию в базе кода, любой человек, имеющий доступ к коду, имеет доступ к любой секретной конфигурации (ключи API aws, ключи api gateway и т. д.).

envdir daemontool является хорошим инструментом для настройки конфигурации, я уверен, что это то, что Heroku использует, чтобы дать приложению свои переменные среды.


Я использовал Настройки Rails Кэшируются.

Он очень прост в использовании, сохраняет ваши значения конфигурации в кэше и позволяет динамически изменять их.