2010-06-11 51 views
1

我想安装一个记录器,以便我可以转储所有已执行的SQL应用程序。问题是,这种记录器与在测试模式下很快初始化的AbstractAdapter相关联,因此不能由我的初始化代码设置。 我试图把将单元测试中的Rails应用程序记录到日志中

ActiveRecord::Base.logger = MyCustomLogger.new(STDOUT) 

environment.rb像有人建议的结束,但在控制台环境(由script/console踢)正在运行时,当没有在测试模式下运行它仅适用。 我不知道是否有任何方式来配置这样的记录器,所以我一定会在任何环境下(测试,开发,生产,控制台)调用

回答

0

就我所能找到的最好的方法是把这样的代码放在initializers文件夹中。这样,无论运行环境如何,记录器总是正确安装。不,在我的Mac OS X Rails 2.3.2上的红宝石1.8.7,如果我把ActiveRecord::Base.logger=...里面的environment.rb然后记录器没有正确安装,因为记录器,Sql连接用于转储SQL安装和缓存之前。

2

创建记录器config/environment.rb应该工作。我得到在标准输出SQL日志记录,当我运行单元测试,如果我把下面的行要么config/environment.rbconfig/environments/test.rb

ActiveRecord::Base.logger = Logger.new(STDOUT) 

MyCustomLogger类做什么特别的事情,导致它在测试失败?如果您改用Logger.new(STDOUT),它会更好吗?

0

在测试/ test_helper.rb中,装车配置/ environment.rb中之前,添加:

RAILS_DEFAULT_LOGGER = MyCustomLogger.new(STDOUT) 

相关的代码在railties 2.3 railties/lib/initializer.rb#L35。不确定如何使用Rails 3.0来完成它。它看起来像你需要调用Rails#logger =,但我还找不到一个好地方。

相关问题