向我解释一下配置如何在Rails中运行

rtf*_*inc 22 ruby config ruby-on-rails

我有一个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)
Run Code Online (Sandbox Code Playgroud)

所以,问题的重点是词汇和跆拳道,他们的意思是......(或点我到一些网站,我已经看了,但没有找到,解释如何工作的.)

  1. MyApp是一个模块?
  2. MyApp ::应用程序是......?什么,一个模块呢?
  3. MyApp :: Application.configure是一个方法吗?
  4. config是一个变量?我怎么在控制台中看到它?
  5. config.logger是一个???
  6. config.paths.log.first是...... - 在控制台我可以看到"MyApp :: Application.configure.config.paths.log.first",但不知道这意味着什么或如何从中提取信息!?!

这个问题太过分了吗?:)

我查看了教程http://guides.rubyonrails.org/configuring.html但它直接跳到了什么事情.

Rya*_*igg 43

一个六方面的问题!天啊.让我们啊哈卷.1这里希望我能获得6倍的赞成票吗?:)

1. MyApp是一个模块?

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

module MyApp
  class MyFunClass
    def my_fun_method
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,如果其他人有MyFunClass,它不会干扰你的MyFunClass.这只是分离代码的好方法.

2. MyApp ::应用程序是......?什么,一个模块呢?

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

 Rails.application.call(Rack::MockRequest.env_for("/"))
Run Code Online (Sandbox Code Playgroud)

您也可以通过调用以下内容获取应用程序的路由:

 Rails.application.routes
Run Code Online (Sandbox Code Playgroud)

定义的主要目的MyApp::Application不是这些你可能永远不会使用的有趣的东西,而是你可以在里面定义特定于应用程序的配置config/application.rb.过滤的参数,应用程序的时区或应自动加载的目录等.这些都包含在Rails配置指南中.

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

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

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
Run Code Online (Sandbox Code Playgroud)

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

如果要将某些内容输出到日志中,这很有用,因为您只需调用此代码即可:

Rails.logger.info("DEBUG INFO GOES HERE")
Run Code Online (Sandbox Code Playgroud)

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

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

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

像你一样解释它.我的主要观点是,你可能永远也不会使用它.


我希望这些可以帮助你更多地理解Rails!

1可怕的骰子笑话.


apn*_*ing 6

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

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

  • MyApp::Application.configure是一种方法.它将所有指令传递给课程.见参考.

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

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

  • config.logger在你定义它之前不存在,所以它是一个Logger实例.见参考.

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

您可以使用以下方式在控制台中访 MyApp::Application.config.paths.log