Каков наилучший способ хранения конфигурации приложения в 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 Кэшируются.
Он очень прост в использовании, сохраняет ваши значения конфигурации в кэше и позволяет динамически изменять их.