sesiones rutas rails ruby-on-rails configuration

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 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:

  1. touch config/passwords.yml

    #config/passwords.yml development: username: ''a'' password: ''b'' production: username: ''aa'' password: ''bb''

  1. touch config/initializers/constants.rb

    #config/initializers/constants.rb AUTHENTICATION = Rails.application.config_for :passwords

  1. y ahora puede usar la constante de AUTHENTICATION en cualquier parte de su aplicación:

    #rails c production :001> AUTHENTICATION[''username''] => ''aa''

  2. luego agregue passwords.yml a .gitignore : echo /config/passwords.yml >> .gitignore , cree un archivo de ejemplo para su comodidad cp /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.