ruby resque без загрузки рельсов окружающей среды - PullRequest
3 голосов
/ 01 августа 2011

У меня есть работник Resque, который отлично работает, но слишком медленно.Основной причиной этого является то, что я использую activerecord и мне нужно загрузить всю среду, которая занимает не менее 10-20 секунд, чтобы загрузить (я не работаю постоянно, потому что использую Heroku и оплачиваю)на время работника бежит).Я использую работника resque для сбора и анализа данных с внешнего веб-сайта, а затем выгружаю их в свою базу данных.

Мой вопрос заключается в том, должен ли я переписать метод, чтобы он не использовал Rails, а вместо этого использовать DataMapper?Или что-то еще, что будет загружаться быстрее, чем activerecord.

Или если мне нужно извлечь код (используя ActiveRecord), который выясняет, что делать с внешними данными, и перемещать их из рабочего и обратно в приложение?

Надеюсь, что имеет смысл,

Ответы [ 3 ]

4 голосов
/ 11 августа 2011

У меня такая же проблема. вы можете настроить свою среду на Rake Resque: настройка Rake Task

Я попробовал это. при условии, что моя задача по восстановлению рейка включена 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

У меня нет полного успеха, потому что я использую драгоценный камень Paperclip, который требует среды для рельсов

3 голосов
/ 03 августа 2011

Rails загружается очень медленно;он предназначен для продолжения работы до определенного времени для перезапуска (для устранения некоторых утечек памяти, скорее всего, любое программное обеспечение не без ошибок), и не предназначен для использования в качестве сайта, который запускается для одного запроса изатем выключите.

Такое использование больше похоже на сценарий.Если вам нужно запустить его с помощью браузера, вы можете легко использовать что-то вроде Erubis , чтобы написать страницу и использовать ActiveRecord в скрипте (я думаю, что его можно было использовать вне рельсов) или подобный уровень абстракции.Сам для небольших задач просто использую Mysql2 .

0 голосов
/ 14 марта 2012

Используйте bundler для получения 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

Остальное: установка пакета.

...