Каков наилучший способ хранения конкретной конфигурации приложения в рельсах? - PullRequest
6 голосов
/ 21 сентября 2008

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

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

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

USE_USER_APP = true

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

Итак, кто-нибудь?

Ответы [ 6 ]

11 голосов
/ 21 сентября 2008

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

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

4 голосов
/ 21 сентября 2008

Я помогал другу настроить решение, упомянутое вчера Рикардо . Мы взломали его, загрузив файл 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
4 голосов
/ 21 сентября 2008

Самое основное, что нужно сделать, это установить переменную класса из вашего environment.rb. Я сделал это для 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"

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

0 голосов
/ 23 октября 2012

Я использовал Кэшированные настройки Rails .

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

0 голосов
/ 20 июля 2011

Использовать переменные среды. Героку использует это. Помните, что если вы сохраняете конфигурацию в кодовой базе, любой, у кого есть доступ к коду, имеет доступ к любой секретной конфигурации (ключи API aws, ключи API шлюза и т. Д.).

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

0 голосов
/ 21 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...