Я задавался вопросом, существует ли лучшая практика на том, где сохранить глобальные настройки в приложении для направляющих. Под чем я подразумеваю, который является т.е.: у Меня есть несколько globals, определенные, который может измениться, но вряд ли и кажется неуместным сохранить их в DB, так как они используются так. Например, у меня есть SYSTEM_EMAIL и SYSTEM_EMAIL_SIGNATURE и SYSTEM_STORAGE_ROOT.
Прямо сейчас я сохраняю их в environment.rb, но я не уверен - ли это правильное место для хранения их.
Спасибо
Править:
Принятый ответ все еще стоит как соответствующий, однако я, так как углублено к использованию https://github.com/markbates/configatron, существуют другие опции, но мне нравится configatron больше всего.
Один из моих любимых приемов - поместить файл, содержащий константы, в каталог 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), вы храните их все в одном файле.
Rails 3 представляет объект Application. Даже с Rails 2 вы можете захотеть хранить свои глобальные объекты аналогичным образом.
environment.rb - это место. Вы можете добавить его в модуль и добавить в каталог lib. тогда вы можете назвать его Module :: MY_GLOBAL_VARIABLE. У обоих есть сильные и слабые стороны. В environment.rb все в порядке, но иногда это выглядит неаккуратно. Если все эти глобальные переменные связаны, вы можете сгруппировать их в модуль.
Поскольку такие значения часто меняются в зависимости от среды, в которой вы работаете, я храню глобальные значения в config/environments/development.rb|production.rb|test.rb
с соответствующими значениями для каждой среды.
Я храню такую информацию о конфигурации в YML-файле. Для получения более подробной информации обратитесь к этому screen-cast.
В качестве альтернативы вы можете использовать гем под названием app_config.
Обычно, когда я делаю что-то подобное, у меня есть два способа сделать это
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