2011-03-01 13 views
5

Para la aplicación Rails 3 que estoy escribiendo, estoy considerando leer algunos de los datos de configuración de archivos XML, YAML o JSON en el sistema de archivos local.Dónde almacenar los datos de configuración (estructurados) en Rails

El punto es: ¿dónde debo poner esos archivos? ¿Hay alguna ubicación predeterminada en las aplicaciones de Rails donde almacenar este tipo de contenido?

Como nota al margen, mi aplicación se implementa en Heroku.

Respuesta

7

lo que siempre hago es:

  • Si el archivo es un archivo de configuración general: Puedo crear un archivo YAML en el directorio/config con una clave de clase alta por entorno
  • Si tengo un archivo para cada entorno (gran proyecto): creo uno YAML por entorno y almacenarlos en/config/ambientes/

Luego de crear un inicializador donde me carga el YAML, que simbolizan las claves del hash config y asigno a una constante como APP_CONFIG

+1

+1 para este método. [Aquí hay un ejemplo de este método] (https://gist.github.com/a217834493ff7d727ade) con un par de características adicionales; podría adoptarse fácilmente para el segundo método (un entorno por archivo). –

1

También puede incluirlo en un modelo para que pueda llamar al Settings.var_name desde cualquier lugar de su aplicación y analizará el archivo para el entorno adecuado.

Con settingslogic joya:

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

Rails crea un directorio config por defecto, que contiene una gran cantidad de información de configuración para su aplicación, incluyendo la base de datos y la información del entorno. Creo que es un primer lugar lógico a considerar.

Una segunda opción sería el directorio app, que contiene todos los modelos, vistas y controladores para la aplicación, pero creo que ese directorio contiene código ejecutable y sus plantillas, así que iría con el directorio config, personalmente.

4

voy a ususaly adoptar este método:

un config/config.yml

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

continuación, crear un ostruct en un inicializador

#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)) 
mesa

Sin DB, según la configuración y el entorno puede recuperar información de una manera simple

AppSetting.another_key 
AppSetting.app_name 

here a reference
tenga un buen día!

Cuestiones relacionadas