【问题标题】:ruby resque without loading rails environment没有加载rails环境的ruby resque
【发布时间】:2011-10-17 10:19:13
【问题描述】:

我有一个 resque 工人,它工作得很好,但速度太慢了。造成这种情况的主要原因是我正在使用 activerecord 并且必须加载整个环境,这至少需要 10-20 秒才能加载(我不会一直保持运行的工作人员,因为我正在使用 Heroku 并付款工人运行的时间)。我正在使用 resque worker 从外部网站获取和解析数据,然后将数据转储到我的数据库中。

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

或者如果我应该提取代码(使用 ActiveRecord)来确定如何处理外部数据并将其移出工作人员并返回到应用程序中?

希望这是有道理的。

【问题讨论】:

    标签: ruby-on-rails-3 activerecord redis datamapper resque


    【解决方案1】:

    我也有同样的问题。 你可以在 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 环境的 Paperclip gem

    【讨论】:

      【解决方案2】:

      Rails 的引导程序真的很慢;它旨在保持运行,直到特定时间重新启动(以消除一些内存泄漏,很可能是,任何软件都不是没有错误的),并且不打算用作为一个请求而启动的站点,并且然后关机。

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

      【讨论】:

        【解决方案3】:

        在没有 Rails 应用程序的情况下使用 bundler 获取 active_record 和其他 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
        

        剩下的事情:捆绑安装。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多