22 votes

Expliquez-moi comment fonctionne la configuration dans Rails.

J'ai une application Rails 3, appelée "MyApp". Dans ma configuration \environments\production.rb

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)

Donc, les questions se concentrent sur la terminologie et ce qu'elle signifie... (ou indiquez-moi un site ,que j'ai cherché mais pas trouvé, pour expliquer comment cela fonctionne).

  1. MyApp est un module ?
  2. MyApp::Application est un ... ? Quoi, un module aussi ?
  3. MyApp::Application.configure est une méthode ?
  4. config est une variable ? Comment puis-je la voir dans la console ?
  5. config.logger est un ? ??
  6. config.paths.log.first est un ... ?? --Dans la console, je vois "MyApp::Application.configure.config.paths.log.first", mais je ne sais pas ce que cela signifie ni comment en extraire des informations.

Est-ce que c'est trop pour une seule question ? :)

J'ai regardé le tutoriel http://guides.rubyonrails.org/configuring.html mais ça saute directement dans ce que font les choses.

44voto

Ryan Bigg Points 64561

Une question à six faces ! Oh là là. Allons-y ahem rouleau. 1 J'espère que je recevrai 6 fois plus de votes positifs pour ce projet :)

1. MonApp est un module ?

Oui, c'est un module. Il agit comme un "conteneur" pour tout ce qui concerne votre application. Par exemple, vous pouvez définir une classe comme ceci :

module MyApp
  class MyFunClass
    def my_fun_method
    end
  end
end

Ensuite, si quelqu'un d'autre a un MyFunClass il n'y aura pas d'interférence avec votre MyFunClass . C'est juste une façon agréable de séparer le code.

2. MyApp::Application est un ... ? Quoi, un module aussi ?

MyApp::Application est en fait une classe, qui hérite de Rails::Application . Cela permet de faire un certain nombre de choses, y compris la mise en place de l'interface utilisateur. Rails.application qui est en fait une instance de MyApp::Application sur lequel vous pouvez faire toutes sortes de choses amusantes, comme envoyer des requêtes à votre application (dans un format rails console o rails c session). Ce code, par exemple, effectuera une requête fictive vers le chemin Root de votre application et renverra un tableau de taille 3 qui n'est qu'une simple réponse Rack :

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

Vous pouvez également obtenir les routes pour votre application en appelant ceci :

 Rails.application.routes

Les principaux objectif de définir MyApp::Application ne sont pas ces choses amusantes que vous n'utiliserez probablement jamais, mais plutôt pour que vous puissiez définir une configuration spécifique à l'application à l'intérieur de l'application config/application.rb . Des choses comme les paramètres à filtrer, le fuseau horaire de l'application ou les répertoires à charger automatiquement. Toutes ces questions sont traitées dans la section Guide de configuration pour Rails .

3. MyApp::Application.configure est une méthode ?

En effet, il s'agit d'une méthode, et elle vous permet d'ajouter des options de configuration supplémentaires à la configuration de votre application après config/application.rb a été chargé. Vous avez probablement vu cette méthode utilisée dans config/environments/development.rb ou l'un des deux autres fichiers de ce répertoire, mais fondamentalement, ils utilisent tous les mêmes options comme indiqué dans le fichier Guide de configuration dont vous avez parlé précédemment.

4. config est une variable ? Comment puis-je la voir dans la console ?

Le site config La "variable" est en fait une méthode définie dans le code utilisé pour l'opération. Rails::Application et renvoie tout simplement un objet de configuration qui stocke la configuration de l'application.

Pour y accéder dans la console, il suffit d'utiliser Rails.application.config . Cela retournera une assez grande Rails::Application::Configuration pour votre plaisir.

5. config.logger est un ? ??

La méthode à laquelle vous faites référence, je suppose, vient de cette ligne dans config/environments/production.rb :

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

La méthode dans cet exemple n'est pas config.logger mais plutôt config.logger= qui est appelée méthode "setter" au pays de Ruby. La méthode sans le signe égal est appelée "getter". Cette méthode met en place un enregistreur alternatif pour l'environnement de production de Rails, auquel on peut accéder en utilisant la méthode Rails.logger dans la console ou dans l'application elle-même.

C'est utile si vous voulez envoyer quelque chose dans les journaux, car vous pouvez simplement appeler ce code :

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

6. config.paths.log.first est un ... ??? --Dans la console, je vois "MyApp::Application.configure.config.paths.log.first" mais je ne sais pas ce que cela signifie ni comment en extraire des informations.

Dans une application Rails, vous pouvez modifier l'emplacement de certains répertoires. Ainsi, cette config.paths est un moyen de garder la trace de l'emplacement de ces répertoires. Dans toute ma vie avec Rails, je n'ai jamais eu à utiliser ou à modifier cette variable et cela peut signifier deux choses :

  1. Il n'est pas souvent utilisé par les programmeurs Rails, ou.. ;
  2. Je ne mène pas une vie très variée.

Interprétez-le comme vous voulez. Ce que je veux dire, c'est que vous ne l'utiliserez probablement jamais non plus.


J'espère que cela vous aidera à comprendre un peu mieux Rails !

1 Terrible blague sur les dés.

6voto

apneadiving Points 64660
  • MyApp est un module, c'est un espace de nom incluant une application que vous allez lancer, voir la ligne suivante

  • MyApp::Application est une classe et vous exécutez ses instances lorsque vous exécutez une application Rails.

  • MyApp::Application.configure est une méthode. Elle transmet toutes les instructions à la classe. Voir Réf.

  • config est une méthode ou une variable d'instance (lorsqu'elle est définie) qui appartient par héritage à Rails::Application::Configuration . Voir Réf.

Vous pouvez le voir en faisant la console : MyApp::Application.config

  • config.logger n'existe pas tant que vous ne l'avez pas défini, il s'agit donc d'une instance de Logger. Voir Réf.

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

vous pouvez y accéder dans la console en utilisant : MyApp::Application.config.paths.log

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X