Me preguntaba cómo agregar variables de configuración para una aplicación rails y cómo acceder a ellos en el controlador, para el correo.g quiero ser capaz de definir una upload_directory en los archivos de configuración decir el desarrollo.rb y ser capaz de acceder a ella en uno de mis controladores.

En segundo lugar estaba planeando tener S3 soporte para cargas en mi aplicación, si quería añadir un archivo yaml con el s3 de acceso, clave secreta, ¿cómo se inicializa en mi Aplicación Rails y ¿cómo puedo acceder a los valores que he definidos en el archivo de configuración.

InformationsquelleAutor Shiv | 2009-09-20

14 Comentarios

  1. 163

    Actualización de 1

    Muy recomendado: voy con Rieles Config joya hoy en día para un control más fino que proporciona.

    Update2

    Si quieres una solución rápida y, a continuación, compruebe Jack Pratt respuesta a continuación.

    Aunque mi respuesta original a continuación todavía funciona, esta respuesta es ahora obsoleto. Recomiendo mirar las actualizaciones 1 y 2.

    Original Respuesta:

    Para una rápida solución, viendo el «Archivo de Configuración YAML» pantalla de cast por Ryan Bates deben 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
    • +1 para que railscasts enlace!
    • Eso fue realmente útil, exactamente lo que yo quería… Gracias!!!
    • Esta respuesta está fuera de fecha. Consulte stackoverflow.com/questions/1450285/… a continuación
    • Es obsoleta porque Rails 3 ha sido lanzado, o porque todos está ahora en Rails 3, o …?
    • Gracias por señalar el anticuado. Odio que sobre Rieles — código desde hace 1 año es demasiado viejo.
    • Para cualquier persona que desee utilizar el YAML método en Rails 3+, usted tendrá que reemplazar RAILS_ENV con Rails.env y RAILS_ROOT con Rails.root.
    • +1 para rails_config joya
    • Revisado el screencast: railscasts.com/episodes/85-yaml-configuration-revised
    • Traté de rails_config. En la documentación que indique a mí para registrar RailsConfig en mi aplicación.rb. Supongo que de la aplicación.rb = config/de la aplicación.rb. Pero donde en la aplicación.rb debo poner el registro RailsConfig línea?

  2. 372

    En Rails 3, la Aplicación específica de la configuración personalizada de los datos se pueden colocar en la configuración de la aplicación objeto. La configuración puede ser asignado en los archivos de inicialización o el medio ambiente archivos-por ejemplo para una aplicación dada 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 necesidad de configuración es:

    Rails.configuration.custom_config_variable
    => :my_config_setting

    ACTUALIZACIÓN de Rails 4

    En Rails 4 hay una nueva forma para que este => http://guides.rubyonrails.org/configuring.html#custom-configuration

    Cómo definir la configuración personalizada de las variables en los rieles

    • Esto no parece funcionar. Yo soy incapaz de hacer referencia a la variable en cualquier otra parte en la aplicación. Tampoco hay mención de ser capaz de hacerlo de esta manera aquí: guides.rubyonrails.org/configuring.html
    • A mí me funciona. Puse mi entorno las opciones de configuración específicas en ambientes/{entorno}.rb, por ejemplo, los entornos de desarrollo.rb. Asegúrese de reiniciar el servidor después de la modificación. No puede ser más elegante técnicas, pero estoy actualizando una aplicación existente que previamente usado ENV[‘XXX’] en el mismo archivo, y desde que me quiere limitar la cantidad de refactorización durante la actualización, esto funcionó bien.
    • Esta es la asignación, pero ¿cómo acceder a este valor, entonces?
    • Si nos fijamos en la aplicación.rb de rails 3.x aplicación de sais «configuración de la Aplicación debe ir a los archivos en el archivo config/inicializadores» como por esta respuesta. Hay un montón de documentación sobre cómo acceder a la variable (edgeguides.rubyonrails.org/configuring.html). por ejemplo, en un archivo llamado some_variables.rb en los inicializadores de carpeta lugar de la variable como se describió anteriormente (en sustitución de MyApp con el nombre de la aplicación), a continuación, cuando usted desea utilizar sólo la llamada config.custom_config_variable por supuesto, Usted puede utilizar cualquier nombre de variable que desee. @Jack Pratt podría editar una respuesta más completa?
    • Estoy en Rails 3.0.4 y podía acceder a la configuración de la variable sólo por hacer: Rieles.aplicación.config.custom_config_variable.
    • Amigo, simple: Ruta de acceso: config/environments/production.rb Config: config.whatever = false Acceso en cualquier lugar: Rails.configuration.whatever
    • Es posible el uso de este para establecer diferentes valores en diferentes entornos? Quiero configurar una variable que tiene valores diferentes en dev y prod.
    • Ten en cuenta que si establece algo que sólo en la producción, y tratar de acceder a él en otro entorno, se quejan undefined method.
    • Lo genial acerca de este voluminoso solución? Un par de personas morirán en la Tierra, mientras que el tipo de Rails.configuration.whatever. Además, no es conveniente cuando usted necesita para mantener a los datos sensibles, por ejemplo, una aplicación de correo electrónico la contraseña, a de la scm.
    • no parece funcionar en Rails 3.2.8
    • Sí como @lulalala ha mencionado, da un error si el valor no está definido. Quiero asumir un valor si no está definido… es esto posible?
    • Hay una forma de comprobar si una config nombre ha sido definido? es decir, si Rails.configuration.custom_config_variable es condicionalmente conjunto, y luego se usa, pero undefined method.
    • trate de Rails.config.my_variable ||= 'default value'. Que reemplaza la variable con ‘valor predeterminado’ si no está definido, pero la deja sola de lo contrario.
    • esto no funciona para mí en los rieles 3.2.11, tengo un ‘rails no se puede iniciar: undefined method’ error en la development.rb archivo de configuración, tiene sentido ya que estoy tratando de escribir en un campo que no existe! ¿cómo podría este trabajo?
    • enlaces: el Uso de esta respuesta para > Rails 3.2: stackoverflow.com/questions/4800028/…
    • Esto puede ser más de la ruby pregunta. Cómo MyApp::De La Aplicación.config.custom_config_variable trabajo. Yo no creo que hay un custom_config_variable setter o captador en el config(Rails::Aplicacion::Configuración del objeto. ¿Cómo funciona esto de ruby perspectiva del objeto de punto de vista ?.
    • Esto no es trabajar en Rails 4.1 obtengo errores «…method_missing': undefined method store’ para #<Rails::Aplicacion::Configuración:0x007f9f735b7240>…» si trato de agregar una variable como config.de la tienda.obras
    • Yo tenía el mismo problema, esto va a hacer el truco: stackoverflow.com/a/18768914/498238
    • muchas gracias!
    • Tenga en cuenta que x parte es probablemente allí para namespacing y debe incluido al entrar personalizada configuración. Es un objeto de tipo Rails::Application::Configuration::Custom.
    • Como @HalilÖzgür señaló, x es para namespacing, por lo que se podría asignar una costumbre objeto de configuración. De lo contrario se acaba a ser el método que faltan, a continuación, crear dinámicamente los atributos, lo cual puede ser malo.
    • esto funcionó para mí después de reiniciar el servidor.

  3. 68

    En Rails 3.0.5, el siguiente enfoque funcionó para mí:

    En config/environments/development.rb, escribir

    config.custom_config_key = :config_value

    El valor custom_config_key puede hacer referencia a partir de otros archivos con la

    Rails.application.config.custom_config_key
    • Ten en cuenta que si establece algo que sólo en la producción, y tratar de acceder a él en otro entorno, se quejan undefined method.
    • He Intentado esto en rails 4.1 y me estoy poniendo de los errores, «…method_missing': undefined method store’ para #<Rails::Aplicacion::Configuración:0x007f9f735b7240>…». Yo estaba tratando de agregar «config.de la tienda.obras» de configuración variable.
    • Usted está recibiendo este error, debido a que los Rieles no sabe lo que store es. Con el fin de utilizar el método en esta respuesta, puede cambiar el nombre de la variable store_works, o crear un config.store bloque con works se definen en ella.
    • Gracias, finalmente me imaginé que fuera. Que estos están anidados hash, así que tengo que inicializar vacío hashes de forma recursiva si voy a usar puntos en mi config nombres.
  4. 30

    Esto funciona en rails 3.1:

    en config/environment.rb (o en el archivo config/environments/.. de destino de un entorno específico) :

    YourApp::Application.config.yourKey = 'foo'

    Este será accesible en el controlador o vistas como esta:

    YourApp::Application.config.yourKey

    (YourApp debe ser reemplazado por el nombre de tu aplicación.)

    Nota: Es el código de Ruby, así que si usted tiene un montón de config teclas, usted puede hacer esto :

    en config/environment.rb :

    YourApp::Application.configure do
      config.something = foo
      config.....
      config....
      .
      config....
    end
    • camelCase 😮 uso snake_case!
  5. 28

    En Rails 4

    Suponiendo que usted ponga sus variables personalizadas en un archivo yaml:

    # config/acme.yml
    development:
      :api_user: 'joe'
      :api_pass: 's4cret'
      :timeout: 20

    Crear 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 lugar de su aplicación se puede acceder a estos valores como:

    Rails.configuration.acme.api_user

    Es conveniente que Rails.application.config_for :acme se carga su acme.yml y el uso correcto del medio ambiente.

  6. 20

    Desde Rails 4.2, sin gemas adicionales, puede cargar config/hi.yml simplemente mediante el uso de 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 usted puede utilizar AUTHENTICATION constante en todas partes en su aplicación:

      #rails c production
      :001> AUTHENTICATION['username'] => 'aa'
    2. a continuación, agregue contraseñas.yml a .gitignore: echo /config/passwords.yml >> .gitignore, crear un archivo de ejemplo para su comodidad cp /config/passwords.yml /config/passwords.example.yml y, a continuación, basta con editar el archivo de ejemplo en su consola de producción con la producción real de los valores.

  7. 4

    He creado un simple plugin de configuración YAML: Yettings

    Funciona de una manera similar a la de código en khelll la respuesta, pero usted sólo tiene que añadir este archivo de configuración YAML:

    app/config/yetting.yml

    El plugin crea dinámicamente una clase que le permite acceder a la YML configuración como métodos de la clase en su aplicación así:

    Yetting.your_setting

    También, si desea utilizar varios archivos de configuración con nombres únicos, los puedes colocar en un subdirectorio dentro de app/config como este:

    app/config/yettings/first.yml
    app/config/yettings/second.yml

    Entonces usted puede acceder a los valores como:

    FirstYetting.your_setting
    SecondYetting.your_setting

    También ofrece una configuración predeterminada que puede ser reemplazado por el medio ambiente. También puede utilizar erb dentro del fichero yaml.

  8. 4

    Si usar Heroku o de lo contrario tienen la necesidad de mantener su aplicación configuración de variables de entorno, el figaro gema es muy útil.

  9. 2

    Me gusta usar los rieles-configuración de para la configuración global de los valores que deben cambiarse a través de la interfaz web.

    • Yo dint quiere utilizar plugins adicionales, etc, como estoy aprendiendo rails, así que la mejor manera de hacerlo sería sin ningún tipo de plugins.
    • Nota: este utiliza la base de datos para almacenar configuraciones, que tal vez es demasiado pesado para algunas personas.
  10. 0

    Algo hemos de comenzar haciendo en el trabajo es el ActiveSupport Ordenó Hash

    Que permite definir la configuración de limpiamente dentro del entorno de archivos, por ej.

    config.service = ActiveSupport::OrderedOptions.new
    config.service.api_key = ENV['SERVICE_API_KEY']
    config.service.shared_secret = ENV['SERVICE_SHARED_SECRET']
  11. -5

    Yo sugeriría una buena aproximación de cómo lidiar con la configuración en su aplicación en todos los. Hay tres reglas básicas:

    • cambiar su configuración no es un código;
    • utilizar configuraciones sobre condiciones;
    • escribir código que significa algo.

    Para tener más información sobre el siguiente enlace: Rieles de configuración de la forma adecuada

Dejar respuesta

Please enter your comment!
Please enter your name here