ruby-on-rails - 向我解释 config 在 Rails 中是如何工作的

标签 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.join("log",Rails.env + ".log"),3,20*1024*1024)

所以,问题集中在术语和它们的意思上……(或将我指向某个网站,我已经看过但没有找到,以解释它是如何工作的。)
  • MyApp 是一个模块?
  • MyApp::Application 是...?什么,也是一个模块?
  • MyApp::Application.configure 是一种方法吗?
  • 配置是一个变量?我如何在控制台中看到它?
  • config.logger 是一个???
  • config.paths.log.first 是 ...??
    --在控制台中我可以看到“MyApp::Application.configure.config.paths.log.first”但不知道这是什么意思或如何从中提取信息!?!

  • 对于一个问题,这是否太过分了? :)

    我看过教程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::Application 是...?什么,也是一个模块?
    MyApp::Application实际上是一个类,它继承自 Rails::Application .这做了很多事情,包括设置 Rails.application对象实际上是 MyApp::Application 的一个实例你可以做各种有趣的事情,比如向你的应用程序发出请求(在 rails consolerails c session 中)。例如,此代码将向应用程序的根路径发出一个虚拟请求,返回一个 3 大小的数组,它只是一个普通的 Rack 响应:
     Rails.application.call(Rack::MockRequest.env_for("/"))
    

    您还可以通过调用以下命令来获取应用程序的路由:
     Rails.application.routes
    

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

    3. MyApp::Application.configure 是一个方法吗?

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

    4. config 是一个变量吗?我如何在控制台中看到它?
    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.paths.log.first 是...?? --在控制台中我可以看到“MyApp::Application.configure.config.paths.log.first”但不知道这是什么意思或如何从中提取信息!?!

    在 Rails 应用程序中,您可以修改某些目录的位置。所以,这个 config.paths方法是一种跟踪这些目录映射到何处的方法。在我的整个 Rails 生活中,我从未使用或修改过这个变量,这可能意味着以下两种情况之一:
  • Rails 程序员不经常使用它,或者;
  • 我的生活并不丰富多彩。

  • 随心所欲地解释它。我的主要观点是你可能永远也不会使用它。

    我希望这些可以帮助您更多地了解 Rails!

    1 可怕的骰子笑话。

    关于ruby-on-rails - 向我解释 config 在 Rails 中是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713547/

    相关文章:

    ruby-on-rails - 一次循环两个数组

    ruby-on-rails - Rails left_outer_joins 多个条件

    ruby-on-rails - 在Rails 3中发送新闻通讯

    ruby-on-rails - 在 gemfile 中使用 bcrypt 不允许我重新启动 rails 服务器,删除它会导致浏览器出现问题(要求我将其添加回去)

    javascript - 如何读取未提交给 git 的配置文件

    ruby-on-rails - Rails3 中的 UUID

    ruby - 如何在加载文件时禁用重新定义常量的警告

    ruby - `nil` .to_i #=> 0`, ` "".to_i #=> 0` `nil` .to_f#=> 0. 0`, ` "".to_f#=> 0.0` 的用例

    c# - 从自定义 Web 配置部分读取单个项目

    python - 使用 python-syntax 配置文件的最佳方法是什么(当然是在 python 中)?