2011-08-01 26 views
3

我有一個resque工作,它工作很好,但太慢了。主要原因是我使用的是activerecord,並且需要加載整個環境至少需要10-20秒才能加載(我不會隨時保持運行的工作人員,因爲我使用Heroku並支付工人運行的時間)。我正在使用resque worker從外部網站獲取解析數據,然後將數據轉儲到我的數據庫中。紅寶石resque沒有加載欄環境

我的問題是我是否應該重寫方法不使用Rails,而是使用DataMapper?或者其他可能比activerecord加載速度更快的其他內容。

或者如果我應該提取代碼(使用ActiveRecord),它會計算出如何處理外部數據並將其移出工作人員並返回到應用程序中?

希望是有道理的。

回答

3

Rails的bootstrap非常慢;它的目的是保持運行,直到某個時間重新啓動(爲了消除最有可能發生的內存泄漏,任何軟件都沒有缺陷),並且不打算用作爲一個請求啓動的站點,並且然後關閉。

這種用法更類似於腳本。如果你需要用瀏覽器啓動它,你可以很容易地使用類似Erubis的東西來編寫頁面,並在腳本中使用ActiveRecord(我認爲它可以在rails之外使用)或類似的抽象層。我自己,對於小任務,我只使用Mysql2

4

我有同樣的問題。 你可以設置你的環境上的耙機resque:安裝耙任務

我試過這個。假設我耙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環境

-1

使用打捆得到active_record和其他寶石,你沒有Rails應用程序。

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 

其餘部分:捆綁安裝。