2011-03-01 5 views
5

Pour l'application Rails 3 que j'écris, j'envisage de lire certaines des données de configuration des fichiers XML, YAML ou JSON sur le système de fichiers local.Où stocker les données de configuration (structurées) dans Rails

Le point est: où devrais-je mettre ces fichiers? Existe-t-il un emplacement par défaut dans les applications Rails où stocker ce type de contenu?

En remarque, mon application est déployée sur Heroku.

Répondre

7

Ce que je fais toujours est:

  • Si le fichier est un fichier de configuration générale: créer un fichier YAML dans le répertoire/config avec une touche de classe supérieure par environnement
  • Si j'ai un fichier pour chaque environnement (grand projet): Je crée un YAML par l'environnement et les stocker dans/config/environnements/

Puis-je créer un initialiseur où je charge le YAML, je symbolise les clés du hachage de configuration et ASSIGN à une constante comme APP_CONFIG

+1

+1 pour cette méthode. [Voici un exemple de cette méthode] (https://gist.github.com/a217834493ff7d727ade) avec quelques fonctionnalités supplémentaires; il pourrait être facilement adopté pour la seconde méthode (un environnement par fichier). –

1

Vous pouvez également l'inclure dans un modèle afin que vous puissiez appeler Settings.var_name de n'importe où dans votre application et il analysera le fichier pour le bon environnement.

Avec settingslogic bijou:

class Settings < Settingslogic 
    source "#{Rails.root}/config/settings.yml" 
    namespace Rails.env 
end 
1

Rails crée un répertoire config par défaut, contenant beaucoup d'informations de configuration pour votre application, y compris la base de données et informations sur l'environnement. Je pense que c'est un premier endroit logique à considérer.

Un deuxième choix serait le répertoire app, qui contient tous les modèles, vues et contrôleurs pour l'application, mais je pense à ce répertoire comme contenant le code exécutable et ses modèles, donc j'irais avec le répertoire config, personnellement.

4

J'adopter ususaly cette méthode:

une config/config.yml

development: 
    another_key: "test" 
    app_name: "My App" 
test: 
    another_key: "test" 
production: 
    prova: "ciao" 

puis créez un ostruct dans un initialiseur

#config/initializer/load_config.rb 
require 'ostruct' 
config = OpenStruct.new(YAML.load_file("#{RAILS_ROOT}/config/config.yml")) 
::AppSetting = OpenStruct.new(config.send(RAILS_ENV)) 

Pas de table DB, selon la configuration de l'environnement et vous pouvez récupérer des informations de manière simple

AppSetting.another_key 
AppSetting.app_name 

here une référence
Passez une bonne journée!

Questions connexes