2011-07-15 11 views
19

Tengo una aplicación Rails 3, llámala "MyApp". En mis config \ environments \ archivo production.rb Veo cosas tales comoExplícame cómo funciona la configuración en Rails

MyApp::Application.configure do 
    config.log_level = :info 
    config.logger = Logger.new(config.paths.log.first, 'daily') 
    ...or... 
    config.logger = Logger.new(Rails.root.join("log",Rails.env + ".log"),3,20*1024*1024) 

Por lo tanto, las preguntas se están centrando en la terminología y wtf que significan ... (o Me apuntan a algún sitio, he buscado pero no encontrado , para explicar cómo funciona esto)

  1. MyApp es un módulo?
  2. MyApp :: ¿La aplicación es ...? ¿Qué, un módulo también?
  3. MyApp :: Application.configure es un método?
  4. config es una variable? ¿Cómo lo veo en la consola?
  5. config.logger is a ???
  6. config.paths.log.first es un ... ?? --en la consola puedo ver "MyApp :: Application.configure.config.paths.log.first" pero no sé lo que eso significa ni cómo extraer información de él.

¿Esto es demasiado para una pregunta? :)

He mirado el tutorial http://guides.rubyonrails.org/configuring.html pero salta directamente a lo que hacen las cosas.

Respuesta

41

Una cuestión de seis caras! Oh mi. Vamos ahem rollo. ¿Aquí está la esperanza de recibir 6 veces los votos por votos? :)

1. MyApp es un módulo?

Sí, es un módulo. Actúa como un "contenedor" para todo lo relacionado con su aplicación.Por ejemplo, podría definir una clase como esta:

module MyApp 
    class MyFunClass 
    def my_fun_method 
    end 
    end 
end 

Entonces, si alguien tiene una MyFunClass, no va a interferir con su MyFunClass. Es solo una buena manera de separar el código.

2. MyApp :: Application is a ...? ¿Qué, un módulo también?

MyApp::Application es en realidad una clase, que hereda de Rails::Application. Esto hace un montón de cosas, incluida la configuración del objeto Rails.application que es en realidad una instancia de MyApp::Application que puede hacer todo tipo de cosas divertidas, como realizar solicitudes a su aplicación (en una sesión rails console o rails c). Este código, por ejemplo, sería hacer una solicitud ficticia a la ruta raíz de su aplicación, el retorno de una matriz de 3 de tamaño que es sólo una respuesta rack sencillo:

Rails.application.call(Rack::MockRequest.env_for("/")) 

También puede obtener las rutas para su solicitud llamando a este :

Rails.application.routes 

La principal finalidad de definir MyApp::Application no son estas cosas divertidas que probablemente nunca uso, sino más bien por lo que se puede definir la configuración específica de la aplicación en el interior config/application.rb. Cosas como qué parámetros se filtran, la zona horaria de la aplicación o qué directorios se deben cargar automáticamente. Todos están cubiertos en el Configuration Guide for Rails.

3. MyApp :: Application.configure es un método?

De hecho, es un método que le permite agregar más opciones de configuración a la configuración de su aplicación después de que se haya cargado config/application.rb. Probablemente haya visto esto usado en config/environments/development.rb o uno de los otros dos archivos en ese directorio, pero básicamente todos usan las mismas opciones que se muestran en ese Configuration Guide vinculado anteriormente.

4. config es una variable? ¿Cómo lo veo en la consola?

La "variable" config es en realidad un método definido en el código utilizado para Rails::Application y devuelve simplemente un objeto de configuración que almacena la configuración para la aplicación.

Para acceder a ella en la consola, simplemente use Rails.application.config. Esto devolverá un objeto bastante grande Rails::Application::Configuration para su placer visual.

5. config.logger is a ???

El método que usted se refiere, supongo, proviene de esta línea en config/environments/production.rb:

# Use a different logger for distributed setups 
# config.logger = SyslogLogger.new 

El método en este ejemplo no es config.logger, sino más bien config.logger=, que se conoce como un " método setter "en Ruby-land. El que no tiene el signo igual recibe el nombre de "getter". Este método configura un registrador alternativo para el entorno de producción en Rails, que luego se puede acceder utilizando Rails.logger dentro de la consola o la aplicación en sí.

Esto es útil si desea enviar algo a los registros, ya que simplemente puede llamar a este código:

Rails.logger.info("DEBUG INFO GOES HERE") 

6. config.paths.log.first es un ... ?? --en la consola puedo ver "MyApp :: Application.configure.config.paths.log.first" pero no sé lo que eso significa ni cómo extraer información de él.

Dentro de una aplicación Rails, puede modificar las ubicaciones de ciertos directorios. Por lo tanto, este método config.paths es una forma de mantener un registro de dónde se asignan estos directorios. En toda mi vida útil de Rails nunca he tenido que utilizar o modificar esta variable y eso puede significar una de estas dos cosas:

  1. No se usa con frecuencia por los programadores de Rails, o;
  2. No vivo una vida muy variada.

Inténtalo como quieras. Mi punto principal es que probablemente nunca lo vayas a usar tampoco.


Espero que estos lo ayuden a comprender Rails un poco más!

Terrible dice joke.

+2

Gran respuesta y broma maravillosa;) – apneadiving

+0

Gracias por la respuesta detallada. Tengo cosas que funcionan pero me inquieté y quiero saber más sobre qué está pasando. Muchas gracias, cuanto más sé, mejor me gusta. – rtfminc

+0

@rtfminc: ¡Me alegra ayudar! Fue una pregunta muy divertida de responder :) –

6
  • MyApp es un módulo, es un espacio de nombres que incluye una aplicación que va a iniciar, véase la siguiente fila

  • MyApp::Application es una clase y que se está ejecutando es instancias cuando se ejecuta una aplicación Rails

  • MyApp::Application.configure es un método. Pasa todas las instrucciones a la clase. See Ref.

  • config es un método o una variable de instancia (cuando se establece) que pertenece a través de la herencia al Rails::Application::Configuration. See Ref.

Se puede ver en la consola haciendo: MyApp::Application.config

  • config.logger no existe hasta que lo define, por lo que es una instancia de Logger. See Ref.

  • config.paths.log es una Rails::Paths::Path

puede acceder a él en la consola usando: MyApp::Application.config.paths.log

Cuestiones relacionadas