Me preguntaba cómo agregar variables de configuración personalizadas a una aplicación de rieles y cómo acceder a ellas en el controlador, por ejemplo, quiero poder definir un directorio upload_directory en los archivos de configuración, por ejemplo desarrollo.rb y poder acceder a él en uno de mis controladores
En segundo lugar, estaba planeando tener soporte S3 para cargas en mi aplicación, si quisiera agregar un archivo yaml con acceso s3, clave secreta, ¿cómo lo inicializo en mi aplicación Rails y cómo accedo a los valores que he definido? en ese archivo de configuración.
Respuestas:
Actualización 1
Muy recomendable: voy con la gema de configuración de Rails hoy en día por el control de grano fino que proporciona.
Actualización2
Si desea una solución rápida, verifique la respuesta de Jack Pratt a continuación.
Aunque mi respuesta original a continuación todavía funciona, esta respuesta ahora está desactualizada. Recomiendo mirar las actualizaciones 1 y 2.
Respuesta original
Para una solución rápida, ver la pantalla "Archivo de configuración YAML" emitida por Ryan Bates debería ser muy útil.
En resumen:
fuente
RAILS_ENV
conRails.env
yRAILS_ROOT
conRails.root
.En Rails 3, los datos de configuración personalizados específicos de la aplicación se pueden colocar en el objeto de configuración de la aplicación. La configuración se puede asignar en los archivos de inicialización o en los archivos de entorno; por ejemplo, para una aplicación determinada
MyApp
:o
Para leer la configuración, simplemente llame a la variable de configuración sin configurarla:
ACTUALIZAR Rieles 4
En Rails 4 hay una nueva forma para esto => http://guides.rubyonrails.org/configuring.html#custom-configuration
fuente
config/environments/production.rb
Configuración:config.whatever = false
Acceda a cualquier lugar:Rails.configuration.whatever
undefined method
.En Rails 3.0.5, el siguiente enfoque funcionó para mí:
En
config/environments/development.rb
, escribeEl valor
custom_config_key
puede ser referenciado desde otros archivos usandofuente
undefined method
.method_missing': undefined method
obtengo errores, "... store 'para # <Rails :: Application :: Configuration: 0x007f9f735b7240> ...". Intenté agregar la variable de configuración "config.store.works".store
es. Para utilizar el método en esta respuesta, puede cambiar el nombre de su variablestore_works
o crear unconfig.store
bloqueworks
definido en ella.Esto funciona en rails 3.1:
en config / environment.rb (o en config / environment / .. para apuntar a un entorno específico):
Estará accesible en el controlador o en vistas como esta:
(Su aplicación debe ser reemplazada por el nombre de su aplicación).
Nota : es el código Ruby, por lo que si tiene muchas claves de configuración, puede hacer esto:
en config / environment.rb:
fuente
En rieles 4
Suponiendo que coloca sus variables personalizadas en un archivo yaml:
Crea un inicializador para cargarlos:
Ahora, en cualquier lugar de su aplicación, puede acceder a estos valores de la siguiente manera:
Es conveniente que
Rails.application.config_for :acme
cargueacme.yml
y use el entorno correcto.fuente
Desde Rails 4.2, sin gemas adicionales, puede cargar config / hi.yml simplemente usando
Rails.application.config_for :hi
.Por ejemplo:
touch config/passwords.yml
touch config/initializers/constants.rb
y ahora puedes usar
AUTHENTICATION
constante en todas partes en tu aplicación:luego agregue passwords.yml a .gitignore :
echo /config/passwords.yml >> .gitignore
cree un archivo de ejemplo para su comodidadcp /config/passwords.yml /config/passwords.example.yml
y luego simplemente edite su archivo de ejemplo en su consola de producción con los valores de producción reales.fuente
Solo quería actualizar esto para las últimas cosas interesantes en Rails 4.2, ahora puede hacerlo dentro de cualquiera de sus
config/**/*.rb
archivos:... y esto estará disponible en su aplicación como:
Ver más aquí: http://guides.rubyonrails.org/configuring.html#custom-configuration
fuente
Echa un vistazo a esta joya ordenada haciendo exactamente eso: https://github.com/mislav/choices
De esta manera, sus datos confidenciales no estarán expuestos en proyectos de código abierto
fuente
Creé un complemento simple para la configuración de YAML: Creé Yettings
Funciona de manera similar al código en la respuesta de khelll, pero solo necesita agregar este archivo de configuración YAML:
El complemento crea dinámicamente una clase que le permite acceder a la configuración de YML como métodos de clase en su aplicación de la siguiente manera:
Además, si desea utilizar múltiples archivos de configuración con nombres únicos, puede colocarlos en un subdirectorio dentro de la aplicación / configuración de esta manera:
Entonces puede acceder a los valores de esta manera:
También le proporciona configuraciones predeterminadas que pueden anularse por entorno. También puede usar erb dentro del archivo yml.
fuente
Realmente me gusta la gema de settingslogic . Muy fácil de configurar y utilizar.
https://github.com/binarylogic/settingslogic
fuente
Si usa Heroku o necesita mantener la configuración de su aplicación como variables de entorno, la gema de Figaro es muy útil.
fuente
Me gusta usar la configuración de rieles para valores de configuración global que necesitan ser cambiables a través de la interfaz web.
fuente
Algo que hemos comenzado a hacer en el trabajo es el hash ordenado de ActiveSupport
Lo que le permite definir su configuración limpiamente dentro de los archivos de entorno, por ejemplo
fuente
Sugeriría un buen enfoque sobre cómo lidiar con la configuración en su aplicación. Hay tres reglas básicas:
Para tener una descripción más detallada, siga este enlace: Configuración de rieles de la manera adecuada
fuente