Ruby on rails 3 不加载rails环境的ruby resque

Ruby on rails 3 不加载rails环境的ruby resque,ruby-on-rails-3,activerecord,redis,datamapper,resque,Ruby On Rails 3,Activerecord,Redis,Datamapper,Resque,我有一个resque工人,工作很好,但太慢了。这样做的主要原因是我使用activerecord,并且必须加载整个环境,加载至少需要10-20秒(我不会在使用Heroku时一直让工作人员运行,并为工作人员的运行时间付费)。我正在使用resque worker从外部网站抓取和解析数据,然后将数据转储到我的数据库中 我的问题是,我是否应该重写该方法,不使用Rails,而是使用DataMapper?或者其他比activerecord加载更快的东西 或者,我是否应该提取代码(使用ActiveRecord)

我有一个resque工人,工作很好,但太慢了。这样做的主要原因是我使用activerecord,并且必须加载整个环境,加载至少需要10-20秒(我不会在使用Heroku时一直让工作人员运行,并为工作人员的运行时间付费)。我正在使用resque worker从外部网站抓取和解析数据,然后将数据转储到我的数据库中

我的问题是,我是否应该重写该方法,不使用Rails,而是使用DataMapper?或者其他比activerecord加载更快的东西

或者,我是否应该提取代码(使用ActiveRecord),以确定如何处理外部数据,并将其移出worker并返回到应用程序中


希望这是有道理的

Rails的引导速度非常慢;它的目的是保持运行,直到重新启动的某个时间(为了消除某些内存泄漏,最有可能的情况是,任何软件都不是无bug的),并且不打算用作一个站点,该站点在一个请求启动后关闭

这种用法更像是脚本。如果您需要使用浏览器启动它,您可以很容易地使用诸如编写页面和在脚本中使用ActiveRecord之类的东西(我认为它可以在rails之外使用)或类似的抽象层。我自己,对于小任务,我只是使用。

我也有同样的问题。 您可以在rake resque:setup rake任务上设置环境

我试过这个。假设我的rake resque任务在
lib/tasks/resque.rake

require "resque/tasks"

task "resque:setup" do
  root_path = "#{File.dirname(__FILE__)}/../.."

  db_config = YAML::load(File.open(File.join(root_path,'config','database.yml')))["development"]
  ActiveRecord::Base.establish_connection(db_config)

  require "#{root_path}/app/workers/photo_downloader.rb" #workers

  #Dir.glob("#{root_path}/app/models/*").each { |r| puts r; require r } #require all model

  require "#{root_path}/app/models/photo.rb" # require model individually
end

我还没有完全成功,因为我使用了需要rails环境的回形针gem

使用bundler在没有rails应用程序的情况下为您获取活动记录和其他gem

require 'rubygems'
require 'logger'
require 'active_record'
require 'bundler'

require "active_support"

require "spreadsheet"

require 'net/ping'

require 'net/http'

Bundler.setup

Bundler.require(:default) if defined?(Bundler)

$config_logger = Logger.new("./log/dev.log")



  class Dbconnect

     def  initialize
       @settings = YAML.load_file('./config/database.yml')["development"]
       @adapter = @settings["adapter"] if @settings["adapter"]
       @database = @settings["database"] if @settings["database"]
       @pool = @settings["pool"] if @settings["pool"]
       @timeout = @settings["timeout"] if @settings["timeout"]
    end

    def connect_to_db
      ActiveRecord::Base.establish_connection(
        :adapter => @adapter,
        :database => @database,
        :reconnect => @reconnect,
        :pool => @pool,
        :timeout => @timeout)

      $config_logger.info "\n  db Connected: to => #{@database}  "
    end
  end

end  

}


Example Gemfile : 


source "http://rubygems.org"

gem 'mail'

gem "escape_utils"

gem 'json',:require => "json"

gem 'json_pure'

gem 'resque'

gem 'resque-scheduler'

gem 'redis-namespace'

gem 'resque-status'

gem 'rake'

gem 'em-udns'

gem 'sqlite3'

gem 'spreadsheet'

gem 'activerecord', '3.2.1', :require => "active_record"

gem 'net-scp', :require => 'net/scp'

gem 'net-sftp', :require => 'net/sftp'

gem 'net-ssh', :require => 'net/ssh'

gem 'dir'

gem 'amatch'

gem 'haml'

gem 'net-ping'



gem install bundler
剩下的事情:捆绑安装