Para la configuración general de la aplicación que no necesita almacenarse en una tabla de base de datos, me gusta crear un config.yml
archivo dentro del directorio de configuración . Para su ejemplo, podría verse así:
defaults: &defaults
audiocast_uri_format: http://blablalba/blabbitybla/yadda
development:
<<: *defaults
test:
<<: *defaults
production:
<<: *defaults
Este archivo de configuración se carga desde un inicializador personalizado en config / initializers :
# Rails 2
APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml")[RAILS_ENV]
# Rails 3+
APP_CONFIG = YAML.load_file(Rails.root.join('config/config.yml'))[Rails.env]
Si está utilizando Rails 3, asegúrese de no agregar accidentalmente una barra diagonal a su ruta de configuración relativa.
Luego puede recuperar el valor usando:
uri_format = APP_CONFIG['audiocast_uri_format']
Vea este Railscast para más detalles.
YAML::ENGINE.yamler = 'syck'
que esto funcione stackoverflow.com/a/6140900/414220RAILS_ENV
conRails.env
yRAILS_ROOT
conRails.root
.Rails.application.config.whatever_you_want = YAML.load_file(Rails.root.join('config', 'config.yml'))[Rails.env]
La versión de Rails 3 del código de inicializador es la siguiente (RAILS_ROOT y RAILS_ENV están en desuso)
APP_CONFIG = YAML.load_file(Rails.root.join('config', 'config.yml'))[Rails.env]
Además, Ruby 1.9.3 usa Psych, que hace que las teclas de combinación distingan entre mayúsculas y minúsculas, por lo que deberá cambiar su archivo de configuración para tenerlo en cuenta, por ejemplo
fuente
"#{Rails.root.to_s}"
;"#{Rails.root}"
trabajos.Rails.root.join('config', 'config.yml')
lugar de"#{Rails.root.to_s}/config/config.yml"
AppName::Application.config.custom
Rieles> = 4.2
Basta con crear un
YAML
archivo enconfig/
el directorio, por ejemplo:config/neo4j.yml
.El contenido de
neo4j.yml
puede ser algo como a continuación (por simplicidad, usé el valor predeterminado para todos los entornos):en
config/application.rb
:Ahora, su configuración personalizada es accesible como a continuación:
Más información
El documento API oficial de Rails describe el
config_for
método como:Si no quieres usar un
yaml
archivoComo dice la guía oficial de Rails:
Ejemplo
Referencia oficial para el
config_for
método | Guía oficial de rielesfuente
Paso 1: Crear config / initializers / appconfig.rb
Paso 2: Crear config / config.yml
Paso 3: obtén constantes en cualquier parte del código
fuente
Solo quería actualizar esto para las últimas cosas interesantes en Rails 4.2 y 5, ahora puede hacerlo dentro de cualquiera de sus
config/**/*.rb
archivos:(y ese es un literal
x
allí, es decir,config.x.
literalmente debe ser eso, y luego puede agregar lo que quiera después delx
)... y esto estará disponible en su aplicación como:
Ver más aquí: http://guides.rubyonrails.org/configuring.html#custom-configuration
fuente
x
.You can configure your own code through the Rails configuration object with custom configuration under either the config.x namespace, or config directly. The key difference between these two is that you should be using config.x if you are defining nested configuration (ex: config.x.nested.nested.hi), and just config for single level configuration (ex: config.hello).
Fuente: guides.rubyonrails.org/configuring.html#custom-configurationSolo información adicional sobre este tema:
".with_indifferent_access" le permite acceder a los valores en el hash utilizando una clave de cadena o con una clave de símbolo equivalente.
p.ej.
APP_CONFIG['audiocast_uri_format'] => 'http://blablalba/blabbitybla/yadda'
APP_CONFIG[:audiocast_uri_format] => 'http://blablalba/blabbitybla/yadda'
Es una cuestión de conveniencia, pero prefiero que mis teclas se representen como símbolos.
fuente
Utilizo algo similar a John para Rails 3.0 / 3.1, pero primero heb analizar el archivo:
Esto me permite usar ERB en mi configuración si es necesario, como leer la url de redistogo de heroku:
fuente
Rails 4
Para crear una configuración personalizada yaml y cargarla (y ponerla a disposición de su aplicación) similar a cómo
database_configuration
.Crea tu
*.yml
, en mi caso necesitaba un archivo de configuración de redis.config/redis.yml
Luego cargue la configuración
config/application.rb
Acceda a los valores:
Rails.configuration.redis_configuration[Rails.env]
a semejante cómo se puede tener acceso a sudatabase.yml
porRails.configuration.database_configuration[Rails.env]
fuente
Rails.configuration.redis_configuration = YAML.load_file("#{Rails.root}/config/redis.yml")[Rails.env]
. Sin embargo, en los rieles 4.2 y superiores, la respuesta de smathy es probablemente una forma más sencilla de hacerlo.Partiendo de la elegante solución de Omer Aslam, decidí convertir las teclas en símbolos. El único cambio es:
Esto le permite luego hacer referencia a valores mediante símbolos como teclas, por ejemplo
Esto me parece más ordenado a mis ojos.
(Publicado como respuesta ya que mi reputación no es lo suficientemente alta como para comentar la respuesta de Omer)
fuente
Me gusta simpleconfig . Le permite tener una configuración por entorno.
fuente
vea mi respuesta a ¿Dónde está el mejor lugar para almacenar los parámetros de la aplicación: base de datos, archivo, código ...?
Una variación de lo que tenía es que es una simple referencia a otro archivo. Ve que environment.rb no se actualiza constantemente y no tiene un montón de cosas específicas de la aplicación. Aunque no es una respuesta específica a su pregunta de '¿es el camino de Rails?', Tal vez habrá alguna discusión al respecto.
fuente
Prefiero acceder a la configuración a través de la pila global de aplicaciones. Evito el exceso de variables globales en el ámbito local.
config / initializers / myconfig.rb
Y accede a él con.
fuente
Mi forma de cargar la configuración antes de que Rails se inicialice
Le permite usar la configuración en la inicialización de Rails y configurar los ajustes por entorno
Puede obtener la configuración de dos maneras: Configuración ['correo electrónico'] o Configuración.email
fuente
Mi mejor forma de configuración personalizada, con un mensaje de aumento cuando falta setting.yml.
se carga desde un inicializador personalizado en config / initializers / custom_config.rb
Cree un YAML en config / setting.yml
fuente