Ruby on rails 在初始化器文件中访问rails 2.2.2配置

Ruby on rails 在初始化器文件中访问rails 2.2.2配置,ruby-on-rails,config,ruby-on-rails-2,Ruby On Rails,Config,Ruby On Rails 2,我在我的config/environments/production.rbenvironment文件中有几行代码用于rails 2.2.2应用程序,它只在本地机器上运行时才执行任何操作: if ENV['HOME'] == "/home/max" #fall back to the default logger instead of hodel, locally config.logger = nil #put sql into a seperate log config.ac

我在我的
config/environments/production.rb
environment文件中有几行代码用于rails 2.2.2应用程序,它只在本地机器上运行时才执行任何操作:

if ENV['HOME'] == "/home/max"
  #fall back to the default logger instead of hodel, locally
  config.logger = nil
  #put sql into a seperate log 
  config.active_record.logger = Logger.new("log/sql.log")
end
把它放在应用程序的生产环境文件中感觉很脏。我还有另一个文件,
config/initializers/max\u local/send\u mails\u from\u max\u gmail.rb
,它将发送的电子邮件配置为使用gmail帐户,并在启动时执行其他一些特定于我的操作

将我的logger配置移到那里似乎比将其放在production.rb文件中更好:首先,gmail.rb的
send\u mails\u被git忽略了,所以没有其他人会看到它

但是,我不知道如何访问其中的rails配置。它没有
config
局部变量,该变量存在于由
Rails::Initializer.run do | config |
生成的块中。我如何获得此配置

谢谢,麦克斯

编辑:下面是对@japed答案的详细回复,需要一些格式,因此这里比评论中更好。我将重点讨论
config.active\u record.logger=logger.new(“log/sql.log”)
,它将sql输出移到log/sql.log而不是标准日志中

我尝试了以下方法: 将production.rb更改如下:请注意,日志记录行已注释掉:

puts "production.rb:#{__LINE__} : config.active_record.logger = #{config.active_record.logger.inspect}"
#config.active_record.logger = Logger.new("log/sql.log")
将以下内容添加到
config/initializers/max\u local/send\u mails\u from\u max\u gmail.rb

puts "send_mails_from_max_gmail.rb:#{__LINE__} : Rails.configuration.active_record.logger = #{Rails.configuration.active_record.logger.inspect}"
Rails.configuration.active_record.logger = Logger.new("log/sql.log")
puts "send_mails_from_max_gmail.rb:#{__LINE__} : Rails.configuration.active_record.logger = #{Rails.configuration.active_record.logger.inspect}"
然后,我重新启动了服务器。我可以看到这个输出:

production.rb:65 : config.active_record.logger = nil
send_mails_from_max_gmail.rb:42 : Rails.configuration.active_record.logger = nil
send_mails_from_max_gmail.rb:44 : Rails.configuration.active_record.logger = #<Logger:0x7fcbee0fedc8 @formatter=nil, @progname=nil, @level=0, @logdev=#<Logger::LogDevice:0x7fcbee0fed28 @dev=#<File:log/sql.log>, @filename="log/sql.log", @mutex=#<Logger::LogDevice::LogDeviceMutex:0x7fcbee0fecd8 @mon_waiting_queue=[], @mon_entering_queue=[], @mon_count=0, @mon_owner=nil>, @shift_size=1048576, @shift_age=0>, @default_formatter=#<Logger::Formatter:0x7fcbee0fed78 @datetime_format=nil>>
production.rb:65:config.active\u record.logger=nil
从gmail.rb:42:Rails.configuration.active\u record.logger发送邮件
从gmail.rb:44:Rails.configuration.active\u record.logger发送邮件#

看起来它正在工作,并且在主配置运行之后发生了重写。但是,sql不是进入log/sql.log,而是进入标准的production.log,好的,深入到文档和rails 2
rails中。logger
映射到常量
rails\u DEFAULT\u logger

所以你应该能做到

if ENV['HOME'] == "/home/max"
  RAILS_DEFAULT_LOGGER = Logger.new("log/sql.log")
end
这次在控制台中进行了正确的测试

RAILS_DEFAULT_LOGGER = Logger.new("log/sql.log")
=> warning: already initialized constant RAILS_DEFAULT_LOGGER

>> Rails.logger.info "Blah"
=> true

我在
log/sql.log

中得到了一些废话,我应该指出我是在控制台中尝试的,而不是在初始化器中。我想它应该能用。实际上,在控制台上这对我不起作用。您是否介意详细介绍一下您在控制台中所做的工作以及如何测试它是否有效?(万一我遗漏了什么)谢谢!是的,我只是研究了一下设置,然后认为在那之后它会工作,对不起。我猜它是在设置配置,但Rails启动时会加载一次,这就是为什么它不工作的原因。@MaxWilliams更新了我的答案,因为我的回答有点麻烦。实际上,我现在可以在控制台中查看输出。这会将所有标准日志推送到log/sql.log中,但我试图做的(以及production.rb中的原始代码所做的)是将sql推送到
log/sql.log
中,并将其余部分留在常规日志中。