2011-08-01 3 views
3

나는 위대한 작품은 물론 너무 느린 resque 작업자가 있습니다. 이것에 대한 주된 이유는 activerecord를 사용하고 있습니다. 적어도 10-20 초가 걸리는 전체 환경을로드해야합니다. (나는 Heroku를 사용하고 지불하는 동안 항상 실행중인 작업자를 유지하지 않습니다. 작업자가 실행되는 동안). 난 resque 작업자를 사용하여 외부 웹 사이트에서 데이터를 구문 분석하고 내 데이터베이스에 데이터를 덤프 & 잡아.레일 환경을로드하지 않고 루비 resque

제 질문은 레일스를 사용하지 않고 DataMapper를 사용하도록 메소드를 다시 작성해야하는지 여부입니다. 또는 activerecord보다 빠르게로드되는 다른 것.

또는 ActiveRecord를 사용하여 코드를 추출해야합니다. 외부 데이터를 어떻게 처리해야하는지 파악하고 작업자 밖으로 이동 한 다음 앱으로 다시 가져 가야합니까?

희망이 있습니다.

답변

3

레일의 부트 스트랩이 실제로 느립니다. 재시작을위한 특정 시간 (대부분의 메모리 누수를 없애기 위해 모든 소프트웨어에 버그가 없음)까지 실행되도록 유지되고 한 요청에 대해 실행되는 사이트로 사용하기위한 것이 아니며 그런 다음 종료하십시오.

그런 종류의 사용법은 스크립트와 더 유사합니다. 브라우저로 실행해야한다면 Erubis과 같은 것을 쉽게 쓸 수 있으며 스크립트에서 ActiveRecord를 사용하여 (레일 외부에서 사용할 수 있다고 생각합니다) 또는 유사한 추상화 레이어를 사용할 수 있습니다. 나 자신, 작은 업무를 위해, 나는 단지 Mysql2를 사용한다.

4

동일한 문제가 있습니다. rake resque에서 환경을 설정할 수 있습니다. 레이크 설정 작업

시도해 보았습니다. 내 레이크 resque 작업을 가정하는 것은 내가 응용 프로그램을 레일 않은 상태로 active_record 및 기타 보석을 얻기 위해 레일 환경을

-1

사용 들러 필요한 종이 클립 보석을 사용 beacuse 내가 완전하게 성공을 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 

에 있습니다.

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 

나머지 부분 : 번들 설치.