Где лучшее место должно сохранить globals в приложении для направляющих?

Я задавался вопросом, существует ли лучшая практика на том, где сохранить глобальные настройки в приложении для направляющих. Под чем я подразумеваю, который является т.е.: у Меня есть несколько globals, определенные, который может измениться, но вряд ли и кажется неуместным сохранить их в DB, так как они используются так. Например, у меня есть SYSTEM_EMAIL и SYSTEM_EMAIL_SIGNATURE и SYSTEM_STORAGE_ROOT.

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

Спасибо

Править:

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

12
задан konung 24 June 2013 в 23:11
поделиться

6 ответов

Один из моих любимых приемов - поместить файл, содержащий константы, в каталог 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), вы храните их все в одном файле.

15
ответ дан 2 December 2019 в 05:03
поделиться

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

2
ответ дан 2 December 2019 в 05:03
поделиться

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

1
ответ дан 2 December 2019 в 05:03
поделиться

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

10
ответ дан 2 December 2019 в 05:03
поделиться

Я храню такую информацию о конфигурации в YML-файле. Для получения более подробной информации обратитесь к этому screen-cast.

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

1
ответ дан 2 December 2019 в 05:03
поделиться

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

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

config/environments. rb

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

Например: мое окружение разработки SYSTEM_STORAGE_ROOT - '/development_root/', а окружение тестирования SYSTEM_STORAGE_ROOT - '/testing_root/'

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

config/environments/

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

config/environments/development.rb будет содержать SYSTEM_STORAGE_ROOT = '/development_root/'

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

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

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

спасибо, sameera

1
ответ дан 2 December 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: