向我解释一下配置在Rails中是如何工作的



我有一个Rails 3应用程序,叫它"MyApp"。在我的配置环境生产。我看到这样的东西

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)

所以,问题集中在术语和它们的意思…(或指向一些网站,我已经看过,但没有找到,解释这是如何工作的。)

    MyApp是一个模块吗?
  1. MyApp::Application is a…?什么,一个模块吗?
  2. MyApp:应用程序。配置是一种方法?
  3. config是一个变量?我如何在控制台上看到它?
  4. 配置。记录器是一个??
  5. config.paths.log。首先是……??在控制台,我可以看到"MyApp::Application.configure.config.paths.log"。但不知道这是什么意思,也不知道如何从中提取信息!?

一个问题是不是太多了?:)

我已经看了教程http://guides.rubyonrails.org/configuring.html,但它直接跳转到事情做什么。

一个六面问题!哦,我的。让我们咳咳开始。1希望我能得到6倍的赞?:)

1。MyApp是一个模块?

是的,它是一个模块。它充当与您的应用程序有关的所有内容的"容器"。例如,您可以这样定义一个类:

module MyApp
  class MyFunClass
    def my_fun_method
    end
  end
end

那么如果别人有MyFunClass,它就不会干扰你的MyFunClass。这是一种分离代码的好方法。

2。MyApp::应用程序是…?什么,一个模块吗?

MyApp::Application实际上是一个继承自Rails::Application的类。这做了很多事情,包括设置Rails.application对象,它实际上是MyApp::Application的一个实例,你可以做各种有趣的事情,比如向应用程序发出请求(在rails consolerails c会话中)。例如,以下代码将向应用程序的根路径发出一个虚拟请求,返回一个3大小的Array,它只是一个普通的Rack响应:

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

你也可以通过调用这个来获取应用程序的路由:

 Rails.application.routes

定义MyApp::Application的主要目的不是这些您可能永远不会使用的有趣的东西,而是您可以在config/application.rb中定义特定于应用程序的配置。诸如筛选哪些参数、应用程序的时区或应该自动加载哪些目录之类的事情。

3。MyApp:应用程序。配置是一种方法?

确实是一个方法,它允许您在加载config/application.rb之后向应用程序的配置添加进一步的配置选项。您可能在config/environments/development.rb或该目录下的其他两个文件之一中看到过这种情况,但基本上它们都使用与前面链接到的配置指南中所示的相同选项。

4。配置是一个变量?我如何在控制台上看到它?

config"变量"实际上是在Rails::Application使用的代码中定义的方法,并返回一个非常简单的配置对象,该对象存储应用程序的配置。

要在控制台中访问它,只需使用Rails.application.config。这将返回一个相当大的Rails::Application::Configuration对象,供您观看。

5。配置。记录器是一个??

我认为,您所指的方法来自config/environments/production.rb中的这一行:

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

本例中的方法不是config.logger,而是config.logger=,在Ruby-land中被称为"setter"方法。没有等号的那个被称为"getter"。该方法为Rails中的生产环境设置了一个备用记录器,然后可以通过在控制台或应用程序本身中使用Rails.logger来访问它。

如果您想要输出一些东西到日志中,这很有用,因为您可以简单地调用这段代码:

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

6。Config.paths.log.first是…??在控制台,我可以看到"MyApp::Application.configure.config.paths.log"。但不知道这是什么意思,也不知道如何从中提取信息!?

在Rails应用程序中,您可以修改某些目录的位置。所以,这个config.paths方法是一种跟踪这些目录映射到哪里的方法。在我的整个Rails生活中,我从来没有使用或修改过这个变量,它可能意味着两种情况之一:

  1. Rails程序员不常用,或者;
  2. 我的生活并不多变。

随你怎么解释。我的主要观点是,你可能也永远不会使用它。


我希望这些能帮助你更多地了解Rails !

1可怕的骰子笑话

  • MyApp是一个模块,它是一个命名空间,包括你要启动的应用程序,见下一行

  • MyApp::Application是一个类,当运行Rails应用程序时,你正在运行它的实例

  • MyApp::Application.configure是一个方法。它将所有指令传递给类。看到裁判。

  • config是一个继承属于Rails::Application::Configuration的方法或实例变量(当设置时)。看到裁判。

你可以看到它在控制台做:MyApp::Application.config

  • config.logger在您定义它之前不存在,所以它是一个Logger实例。看到裁判。

  • config.paths.logRails::Paths::Path

可以在控制台中使用:MyApp::Application.config.paths.log

相关内容

  • 没有找到相关文章

最新更新