我正在为我的项目使用Rails 2.3,使用Resque处理后台任务。
ActiveRecord通常会在您第一次使用任何模型时执行“SHOW TABLES”和“SHOW FIELDS FROM”查询,然后对其进行缓存。我的问题是Resque为每个作业分配一个新进程,因此永远不会缓存,ActiveRecords会在每个作业上再次运行这些查询。
强制ActiveRecord缓存这些查询的推荐方法是什么? 在初始化程序中为我的大多数模型添加“Model.inspect”会有所帮助,但仍会保留一些“SHOW TABLES”查询。
答案 0 :(得分:1)
在您的rake任务中,您必须为resque做环境初始化,添加以下代码段:
# Make sure we've pre-loaded all of the schema information
Resque.before_first_fork do
ActiveRecord::Base.send(:subclasses).each { |klass| klass.columns }
end
例如,在lib/tasks/resque.rake
:
task :resque_environment => :environment do
# Make sure we've pre-loaded all of the schema information
Resque.before_first_fork do
ActiveRecord::Base.send(:subclasses).each { |klass| klass.columns }
end
end