我有一个 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::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 console
或 rails 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!
1 可怕的骰子笑话。
关于ruby-on-rails - 向我解释 config 在 Rails 中是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713547/