59 votes

Comment changer l'ordre de chargement des initialiseurs dans Rails 3?

J'ai un initialiseur qui charge les paramètres de configuration à partir d'un fichier yaml. J'ai besoin d'utiliser ces paramètres dans d'autres initialiseurs. Les paramètres ne sont pas vus par les initialiseurs qui en ont besoin. Ce que je pense est en train de se passer, les paramètres sont chargés trop tard. Comment puis-je garantir que mon initialiseur de configuration est chargé en premier? Est-ce un-rails comme si les initialiseurs dépendent d'un autre?

Merci!

78voto

Júlio Santos Points 2638

Renommer l'initialiseur d' 01_name.rb, qui va l'obliger à charger par ordre alphabétique précédemment.

Modifier

Pour citer l'officiel des Rails de Guide pour la configuration (merci zététitien pour l'astuce):

Si vous avez tout dépendant de l'ordre dans votre initialiseurs, vous pouvez contrôler la l'ordre de chargement en les nommant. Par exemple, 01_critical.rb sera chargé avant 02_normal.rb.

24voto

Tyler Long Points 1216

Placez le code de configuration dans le fichier config / environment.rb, juste après la première instruction require, tel que:

 # 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!
 

23voto

noomerikal Points 306

Même si le guide recommande de préfixer les noms de fichiers d'initialisation avec des nombres, cela semble vraiment moche. Une autre méthode consiste à utiliser les points d’initialisation fournis. Voir http://guides.rubyonrails.org/configuring.html#initialization-events

Par exemple

 # application.rb

module YourApp
  class Application < Rails::Application
    config.before_initialize do
     # initialization code goes here
    end
  end
end
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: