Как изменить порядок загрузки инициализаторов в Rails 3? - PullRequest
59 голосов
/ 24 января 2011

У меня есть инициализатор, который загружает параметры конфигурации из файла yaml.Мне нужно использовать эти настройки в других инициализаторах.Настройки не видны инициализаторам, которым они нужны.То, что я думаю, происходит, настройки загружаются слишком поздно.Как я могу гарантировать, что мой инициализатор конфигурации будет загружен первым?Разве это не похоже на то, чтобы инициализаторы зависели от другого?

Ответы [ 4 ]

78 голосов
/ 24 января 2011

Переименуйте инициализатор в 01_name.rb, что заставит его загружаться в алфавитном порядке ранее.

Редактировать

Цитирую официальное Руководство по Rails для конфигурации (спасибо zetetic за подсказку):

Если у вас есть какая-либо зависимость от порядка в ваши инициализаторы, вы можете контролировать порядок загрузки по именам. Например, 01_critical.rb будет загружен раньше 02_normal.rb.

24 голосов
/ 15 июня 2012

Поместите код конфигурации в файл config / environment.rb сразу после первого оператора require, например:

# Load the rails application
require File.expand_path('../application', __FILE__)

# Load global configurations
CONFIG = Hashie::Mash.new YAML.load_file(Rails.root.join("config", "application.yml"))[Rails.env]

# Initialize the rails application
RailsSetup::Application.initialize!
23 голосов
/ 31 июля 2012

Несмотря на то, что руководство рекомендует добавлять имена файлов инициализатора к числам, это выглядит ужасно. Другой способ - использовать предоставленные хуки инициализации. Смотри http://guides.rubyonrails.org/configuring.html#initialization-events

* 1005 Е.Г. *

# application.rb

module YourApp
  class Application < Rails::Application
    config.before_initialize do
     # initialization code goes here
    end
  end
end
6 голосов
/ 28 октября 2014

Используйте require_relative, чтобы убедиться, что один файл загружается первым.

# aaa.rb
require_relative 'bbb'
# ... code using values from bbb.rb ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...