Подтвердить что ты не робот

Где лучше всего хранить глобалы в приложении Rails?

Мне было интересно, есть ли лучшая практика хранения глобальных настроек в приложении rails. Я имею в виду: i.e: у меня определено несколько глобальных переменных, которые могут измениться, но вряд ли, и кажется неуместным хранить их в БД, так как они используются так много. Например, у меня есть SYSTEM_EMAIL и SYSTEM_EMAIL_SIGNATURE и SYSTEM_STORAGE_ROOT.

Сейчас я храню их в среде environment.rb, но я не уверен, что это правильный палец для их хранения.

Спасибо

EDIT:

Принятый ответ по-прежнему подходит, но я с тех пор перешел к использованию https://github.com/markbates/configatron, есть другие варианты, но мне нравится configatron больше всего.

4b9b3361

Ответ 1

Один из моих любимых методов - поместить файл, содержащий константы в каталог config/initializers/ (все файлы в этом каталоге загружаются автоматически), но с разделом для каждой среды Rails. например.


case ENV['RAILS_ENV']
  when "development"
    SYSTEM_EMAIL = ...
    SYSTEM_EMAIL_SIGNATURE = ...
  when "staging"
    SYSTEM_EMAIL = ...
    SYSTEM_EMAIL_SIGNATURE = ...
  when "production"  
    SYSTEM_EMAIL = ...
    SYSTEM_EMAIL_SIGNATURE = ...
end

Если вы хотите вместо этого загрузить все константы в один большой хэш, вы можете загрузить их как файл YAML. Создайте два файла, один из которых называется, скажем, config/initializers/email_constants.rb, а другой config/email_constants.yml. В последнем случае что-то вроде:


development:
  :system_email: ...
  :system_email_signature: ...
staging:
  :system_email: ...
   system_email_signature: ...

... etc ...

Затем в config/initializers/email_constants.rb поместите:


EMAIL_CONSTANTS = YAML.load_file("#{RAILS_ROOT}/config/email_constants.yml")[RAILS_ENV]

Загружает весь файл YAML и присваивает значение соответствующего ключа (который представляет RAILS_ENV) на EMAIL_CONSTANTS.

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

Ответ 2

Поскольку такие значения часто меняются в зависимости от среды, в которой вы работаете, я храню глобальные значения в config/environments/development.rb|production.rb|test.rb с соответствующими значениями для каждой среды.

Ответ 3

Rails 3 вводит объект Application. Даже с Rails 2 вы можете захотеть сохранить свои глобальные переменные аналогичным образом.

Ответ 4

environment.rb - это место. Вы можете добавить его в модуль и добавить его в каталог lib. то вы можете назвать его как Module:: MY_GLOBAL_VARIABLE. Оба имеют сильные стороны и слабые места. В environment.rb нормально, но иногда это выглядит грязно. Если все эти глобальные переменные связаны, вы можете группировать их в модуле.

Ответ 5

Я храню такую ​​конфигурационную информацию в файле YML. Подробнее см. screen-cast.

В качестве альтернативы вы можете использовать драгоценный камень, называемый app_config.

Ответ 6

Обычно, когда я делаю что-то подобное, у меня есть два способа сделать это

1 - Если мои глобальные переменные являются общими для всех трех сред (разработка, тестирование, производство), то я сохраню его в

config/environment.rb файл

Но скажем, мои значения изменяются в среде

Пример: моя среда разработки SYSTEM_STORAGE_ROOT - это '/development_root/' и тестовая среда SYSTEM_STORAGE_ROOT is '/testing_root/'

тогда я буду хранить их внутри

конфигурации/среда/

В соответствии с приведенным выше примером

config/environment/development.rb будет иметь SYSTEM_STORAGE_ROOT = '/development_root/'

config/environment/test.rb будет иметь SYSTEM_STORAGE_ROOT = '/testing_root/'

config/environment/production.rb будет иметь SYSTEM_STORAGE_ROOT = '/production_root/'

надеюсь, что это поможет,

веселит, Sameera