Ruby on rails 向我解释配置如何在Rails中工作

Ruby on rails 向我解释配置如何在Rails中工作,ruby-on-rails,ruby,config,Ruby On Rails,Ruby,Config,我有一个Rails 3应用程序,称之为“MyApp”。在我的config\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.jo

我有一个Rails 3应用程序,称之为“MyApp”。在我的config\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)
所以,问题集中在术语和wtf上,他们的意思是。。。(或者给我指一些我已经看过但没有找到的网站,来解释这是如何工作的。)

  • MyApp是一个模块
  • MyApp::应用程序是。。。?什么,还有一个模块
  • MyApp::Application.configure是一种方法吗
  • 配置是一个变量吗?如何在控制台中查看它
  • config.logger是一个
  • config.path.log.first是一个。。。?? --在控制台中,我可以看到“MyApp::Application.configure.config.path.log.first”,但不知道这意味着什么,也不知道如何从中提取信息 这对一个问题来说太多了吗?:)

    我已经看过了教程,但它直接跳到了实际操作中。

    • MyApp
      是一个模块,它是一个名称空间,包含您将要启动的应用程序,请参见下一行

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

    • MyApp::Application.configure
      是一种方法。它将所有指令传递给全班

    • config
      是通过继承属于
      Rails::Application::Configuration
      的方法或实例变量(设置时)

    您可以在控制台中看到它正在执行:
    MyApp::Application.config

    • config.logger
      在您定义它之前不存在,因此它是一个记录器实例

    • config.paths.log
      是一个
      Rails::Path::Path


    您可以使用以下命令在控制台中访问它:
    MyApp::Application.config.path.log

    一个六面问题!哦,天哪。让我们开始吧。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控制台
    Rails c
    会话中)。例如,此代码将向应用程序的根路径发出一个虚拟请求,返回一个3大小的阵列,它只是一个普通机架响应:

     Rails.application.call(Rack::MockRequest.env_for("/"))
    
    您还可以通过调用以下命令获取应用程序的路由:

     Rails.application.routes
    
    定义
    MyApp::Application
    的主要目的并不是让您永远不会使用这些有趣的东西,而是让您可以在
    config/Application.rb
    中定义特定于应用程序的配置。例如过滤哪些参数、应用程序的时区或应该自动加载哪些目录。这些都包含在本手册中

    3。MyApp::Application.configure是一种方法?

    实际上,这是一种方法,它允许您在加载
    config/application.rb
    后向应用程序的配置中添加更多的配置选项。您可能已经在
    config/environments/development.rb
    或该目录中的其他两个文件中看到了这一点,但基本上它们都使用了与前面链接的相同的选项

    4。配置是一个变量吗?如何在控制台中查看它?

    config
    “变量”实际上是在用于
    Rails::Application
    的代码中定义的一个方法,它只返回一个存储应用程序配置的配置对象

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

    5。config.logger是一个???

    我假设您所指的方法来自
    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.path.log.first是一个--在控制台中,我可以看到“MyApp::Application.configure.config.path.log.first”,但不知道这意味着什么,也不知道如何从中提取信息

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

  • Rails程序员不经常使用它,或者
  • 我的生活不太多样化
  • 你想怎么解释就怎么解释。我的主要观点是,你可能永远也不会使用它


    我希望这些能帮助您更多地理解Rails


    1个可怕的骰子笑话。

    谢谢你的详细回答。我有工作,但不安,想知道更多的wtf正在进行。非常感谢,我知道的越多,我就越喜欢。@rtfminc:很高兴能帮忙!对answe来说,这是一个非常有趣的问题