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:
- No se usa con frecuencia por los programadores de Rails, o;
- 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.
Gran respuesta y broma maravillosa;) – apneadiving
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
@rtfminc: ¡Me alegra ayudar! Fue una pregunta muy divertida de responder :) –