Ruby on rails 向我解释配置如何在Rails中工作
我有一个Rails 3应用程序,称之为“MyApp”。在我的config\environments\production.rb文件中,我看到如下内容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
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
是一个类,您在运行Rails应用程序时运行它的实例MyApp::Application
是一种方法。它将所有指令传递给全班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
1个可怕的骰子笑话。谢谢你的详细回答。我有工作,但不安,想知道更多的wtf正在进行。非常感谢,我知道的越多,我就越喜欢。@rtfminc:很高兴能帮忙!对answe来说,这是一个非常有趣的问题