2

我在我的项目中使用 Rails 2.3,使用 Resque 处理后台任务。

ActiveRecord 通常在您第一次使用任何模型时执行“SHOW TABLES”和“SHOW FIELDS FROM”查询,然后将其缓存。我的问题是 Resque 为每个作业创建了一个新进程,因此它永远不会被缓存,并且 ActiveRecords 会在每个作业上再次运行这些查询。

强制 ActiveRecord 缓存这些查询的推荐方法是什么?在初始化程序中为我的大多数模型添加“Model.inspect”会有所帮助,但仍然存在一些“SHOW TABLES”查询。

4

1 回答 1

1

在您必须为 resque 进行环境初始化的 rake 任务中,添加以下代码段:

  # 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
于 2011-08-28T00:03:54.110 回答