ruby on rails - rutas - Cómo definir variables de configuración personalizadas en rieles
rutas en ruby on rails (14)
En rieles 4
Suponiendo que coloques tus variables personalizadas en un archivo yaml:
# config/acme.yml
development:
:api_user: ''joe''
:api_pass: ''s4cret''
:timeout: 20
Crea un inicializador para cargarlos:
# config/initializers/acme.rb
acme_config = Rails.application.config_for :acme
Rails.application.configure do
config.acme = ActiveSupport::OrderedOptions.new
config.acme.api_user = acme_config[:api_user]
config.acme.api_pass = acme_config[:api_pass]
config.acme.timeout = acme_config[:timeout]
end
Ahora en cualquier parte de tu aplicación puedes acceder a estos valores así:
Rails.configuration.acme.api_user
Es conveniente que Rails.application.config_for :acme
cargue su acme.yml
y use el entorno correcto.
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 upload_directory en los archivos de configuración, digamos development.rb y poder acceder a él en uno de mis controladores
En segundo lugar, planeaba tener soporte S3 para las subidas en mi aplicación, si quisiera agregar un archivo yaml con el 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.
Algo que hemos empezado 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
config.service = ActiveSupport::OrderedOptions.new
config.service.api_key = ENV[''SERVICE_API_KEY'']
config.service.shared_secret = ENV[''SERVICE_SHARED_SECRET'']
Echa un vistazo a esta bonita gema haciendo exactamente eso: https://github.com/mislav/choices
De esta manera sus datos confidenciales no serán expuestos en proyectos de código abierto.
En Rails 3, los datos de configuración personalizada específica 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
:
MyApp::Application.config.custom_config_variable = :my_config_setting
o
Rails.configuration.custom_config_variable = :my_config_setting
Para leer la configuración, simplemente llame a la variable de configuración sin configurarla:
Rails.configuration.custom_config_variable
=> :my_config_setting
Actualización de rieles 4
En Rails 4 hay una nueva forma para esto => http://guides.rubyonrails.org/configuring.html#custom-configuration
En Rails 3.0.5, el siguiente enfoque funcionó para mí:
En config/environments/development.rb
, escribe
config.custom_config_key = :config_value
El valor custom_config_key
puede luego ser referenciado desde otros archivos usando
Rails.application.config.custom_config_key
Esto funciona en los carriles 3.1:
en config / environment.rb (o en config / environment / .. para apuntar a un entorno específico):
YourApp::Application.config.yourKey = ''foo''
Esto será accesible en el controlador o en vistas como esta:
YourApp::Application.config.yourKey
(Tu aplicación debe ser reemplazada por el nombre de tu aplicación).
Nota : es el código Ruby, así que si tienes muchas claves de configuración, puedes hacer esto:
en config / environment.rb:
YourApp::Application.configure do
config.something = foo
config.....
config....
.
config....
end
He creado un complemento simple para la configuración de YAML: Yettings
Funciona de manera similar al código en la respuesta de khelll, pero solo necesita agregar este archivo de configuración YAML:
app/config/yetting.yml
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 esta manera:
Yetting.your_setting
Además, si desea utilizar varios archivos de configuración con nombres únicos, puede colocarlos en un subdirectorio dentro de app / config de la siguiente manera:
app/config/yettings/first.yml
app/config/yettings/second.yml
Entonces puedes acceder a los valores como este:
FirstYetting.your_setting
SecondYetting.your_setting
También le proporciona la configuración predeterminada que se puede anular por entorno. También puedes usar erb dentro del archivo yml.
Me gusta mucho la joya de settingslogic lógica. Muy fácil de configurar y utilizar.
Me gusta usar rails-settings de rails-settings para los valores de configuración global que deben ser modificables a través de la interfaz web.
Si usa Heroku o si necesita mantener la configuración de su aplicación como variables de entorno, la gema figaro es muy útil.
Solo quería actualizar esto para las últimas novedades en Rails 4.2, ahora puedes hacer esto dentro de cualquiera de tus archivos config/**/*.rb
:
config.x.whatever.you.want = 42
... y esto estará disponible en su aplicación como:
Rails.configuration.x.whatever.you.want
Vea más aquí: http://guides.rubyonrails.org/configuring.html#custom-configuration
Yo sugeriría un buen enfoque sobre cómo manejar la configuración en su aplicación. Hay tres reglas básicas:
- cambia tu configuración no un código;
- utilizar configuraciones sobre condiciones;
- Escribir código que signifique algo.
Para tener una descripción más detallada, siga este enlace: Configuración de rieles de la manera adecuada
Actualización 1
Muy recomendado: voy con la gema Rails Config hoy en día para 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 de "Archivo de configuración YAML" emitida por Ryan Bates debería ser muy útil.
En resumen:
# config/initializers/load_config.rb
APP_CONFIG = YAML.load_file("#{Rails.root}/config/config.yml")[Rails.env]
# application.rb
if APP_CONFIG[''perform_authentication'']
# Do stuff
end
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
#config/passwords.yml development: username: ''a'' password: ''b'' production: username: ''aa'' password: ''bb''
touch config/initializers/constants.rb
#config/initializers/constants.rb AUTHENTICATION = Rails.application.config_for :passwords
y ahora puede usar la constante de
AUTHENTICATION
en cualquier parte de su aplicación:#rails c production :001> AUTHENTICATION[''username''] => ''aa''
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 edite su archivo de ejemplo en su consola de producción con valores de producción reales.