标签: resque

Rails Resque外部模块中未定义的方法错误

我无法从resque worker中的包含模块调用方法.在下面的示例中,当我尝试say在worker(在TestLib模块中)中调用方法时,我一直得到未定义的方法错误.我已将代码简化为基础知识来说明问题:

控制器 (/app/controllers/test_controller.rb)

class TestController < ApplicationController
  def testque
    Resque.enqueue( TestWorker, "HI" )
  end
end
Run Code Online (Sandbox Code Playgroud)

(/lib/test_lib.rb)

module TestLib
  def say( word )
    puts word
  end
end
Run Code Online (Sandbox Code Playgroud)

工人 (/workers/test_worker.rb)

require 'test_lib'

class TestWorker
  include TestLib

  @queue = :test_queue

  def self.perform( word )
    say( word ) #returns: undefined method 'say' for TestWorker:Class
    TestLib::say( word ) #returns: undefined method 'say' for TestLib::Module
  end
end
Run Code Online (Sandbox Code Playgroud)

Rakefile (resque.rake)

require "resque/tasks"
task "resque:setup" => :environment
Run Code Online (Sandbox Code Playgroud)

我正在使用以下命令运行resque: rake environment resque:work QUEUE='*'

Gems:rails(3.0.4)redis(2.2.2)redis-namespace(1.0.3)resque(1.19.0)

服务器:nginx/1.0.6 …

ruby-on-rails worker resque

8
推荐指数
1
解决办法
2726
查看次数

背景工作者在轨道app观看通信

让我们说我有一个博客应用程序与帖子.创建帖子后,将创建一个工作程序来处理某些后台操作.我的情况是,在提交帖子表单后,我想显示某种加载消息(gif加载器等),当工作人员完成时,我想隐藏加载消息并显示工作人员提供的一些数据.我的问题是,工人完成工作并将其显示在用户前端的最佳沟通方式是什么.工人回调看起来像这样

def worker_finish
  #message the user
end
Run Code Online (Sandbox Code Playgroud)

ruby views background-process resque

8
推荐指数
1
解决办法
1447
查看次数

Rails&Heroku:我需要多少工人/动物

我有一个火种风格的应用程序,允许用户评价事件.在用户对事件进行评级后,将运行后台resque作业,根据用户的反馈对其他事件进行重新排序.

此后台作业大约需要10秒钟,每个用户每分钟运行大约20次.

用一个简单的例子.如果我有10个用户在任何给定时间使用该应用程序,并且我从不希望等待工作,那么最佳方法是什么?

我对Dynos,resque pool和redis连接感到困惑.有人能帮我理解其中的区别吗?有没有办法计算这个?

ruby-on-rails heroku resque

8
推荐指数
1
解决办法
1186
查看次数

resque-web无法以500 Server Error启动

我正在遵循安装resque的配置指南.我遇到了一个(OpenURI :: HTTPError).我正在使用RVM 1.9.2-p180,rails 3.0.6和POW .'resque-web'无法启动500 Server Error.到底发生了什么事?

要复制问题:

  1. 用$开始redis redis-server
  2. 用一个工人开始 $ VVERBOSE=1 QUEUE=file_serve rake environment resque:work
  3. 尝试使用以下命令启动Resque-Web: RAILS_ENV=development resque-web config/initializers/resque.rb

配置/ resque.yml

development: localhost:6379
test: localhost:6379
staging: localhost:6379
fi: localhost:6379
Run Code Online (Sandbox Code Playgroud)

初始化/ resque.rb:

rails_root = ENV['RAILS_ROOT'] || File.dirname(__FILE__) + '/../..'
rails_env = ENV['RAILS_ENV'] || 'development'

require 'resque'
# require 'yaml'

unless defined?($redis)
  $redis = Redis.new($redis = Redis.new(:host => 'localhost', :port => 6379))
end

Resque.redis = $redis
Run Code Online (Sandbox Code Playgroud)

终奌站:

     master ~/projects/MyApp $ RAILS_ENV=development resque-web config/initializers/resque.rb
[2011-05-20 11:42:48 -0700] …
Run Code Online (Sandbox Code Playgroud)

ruby open-uri ruby-on-rails resque

7
推荐指数
1
解决办法
2884
查看次数

将对象传递给Resque作业是否安全?

将对象传递给Resque作业是否安全?例如:

Resque.enqueue(Foobar, @foo, @bar)
Run Code Online (Sandbox Code Playgroud)

代替:

Resque.enqueue(Foobar, @foo.id, @bar.id)
Run Code Online (Sandbox Code Playgroud)

如果我传递对象,有什么不利之处吗?

backgroundworker resque ruby-on-rails-3

7
推荐指数
1
解决办法
2217
查看次数

Resque:每个队列一个工作者

我目前有一个Rails 3.0项目,Ruby 1.9.2和Resque.

我的应用程序有多个工作类和多个队列,它们是动态创建的(在运行时).此外,还有多个工作人员可以在任何队列上自由工作,因为在开始时没有任何现有队列,并且无法预测:

$ COUNT=3 QUEUE=* rake resque:workers
Run Code Online (Sandbox Code Playgroud)

根据projectid 创建的队列:

@queue = "project_#{project.id}".to_sym
Run Code Online (Sandbox Code Playgroud)

对于给定的队列,他们的工作必须按顺序处理,一次处理一个.我的问题是,通过拥有多个工作人员,可以并行处理多个工作.

有没有办法设置每个队列的最大工作数(为1)?有没有办法在作业处理时锁定队列?

谢谢!

ruby resque ruby-on-rails-3 ruby-1.9.2

7
推荐指数
1
解决办法
3202
查看次数

使用Heroku在RedisToGo上使用Resque,Resque Server

我一直试图让Resque(使用Resque服务器)和RedisToGo在heroku(雪松)上工作一段时间,但我一直遇到这个错误:

Redis::CannotConnectError (Error connecting to Redis on 127.0.0.1:6379 (ECONNREFUSED)):
Run Code Online (Sandbox Code Playgroud)

它在本地工作,我可以在我的应用程序的Heroku控制台中访问redis.

我的Procfile有:

web: bundle exec thin start -p $PORT -e $RACK_ENV
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
resque: env TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10 bundle exec rake resque:work
Run Code Online (Sandbox Code Playgroud)

我的Gemfile有:

gem 'redis'

#Background queue
gem 'resque', '~> 1.22.0', :require => "resque/server"
Run Code Online (Sandbox Code Playgroud)

LIB /任务/ resque.rake:

require 'resque/tasks'

task "resque:setup" => :environment do
  ENV['QUEUE'] = '*'
end

desc "Alias for resque:work (To run workers on Heroku)"
task "jobs:work" => "resque:work"
Run Code Online (Sandbox Code Playgroud)

routes.rb中:

  mount Resque::Server.new, :at => …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails heroku resque redis ruby-on-rails-3

7
推荐指数
1
解决办法
3645
查看次数

如何在Rails服务器启动时运行"rake resque:work QUEUE =*"?

我已经正确安装了resque,但是要处理我需要运行的所有队列

rake resque:work QUEUE='*'
Run Code Online (Sandbox Code Playgroud)

问题是我需要保持终端窗口打开,否则resque:工作将无法正常工作.

你知道每次运行"rails server"时自动运行rake命令的方法吗?

我在Localhost上

LIB /任务/ resque.rake

require 'resque/tasks'

task "resque:setup" => :environment do
    ENV['QUEUE'] = "*"
end
Run Code Online (Sandbox Code Playgroud)

rake ruby-on-rails resque ruby-on-rails-3

7
推荐指数
1
解决办法
2万
查看次数

如何使用ActionController :: Live以及Resque + Redis(用于聊天应用程序)

我正在尝试为我的rails应用程序构建聊天功能.我使用ActionController::Live,Puma,Resque,Redis对于这一点.所以基本上在这种情况下,redis subscribe方法在后台使用resque.到目前为止,我所做的是每当用户在下面的表单字段即聊天框中输入文本时

    <%= form_tag chat_box_publish_path, method: :get do %>
        <%= text_field_tag :query, params[:query], class: "form-control", id: "chatSearchBox",
            placeholder: 'Search' %>
    <% end %>
Run Code Online (Sandbox Code Playgroud)

..请求即将到来的Publish方法ChatBoxController.

def publish
    $redis.publish("chat_message:1:1", "#{params[:query]}")
    respond_to do |format|
        format.js {render nothing: true}
    end
end
Run Code Online (Sandbox Code Playgroud)

..现在,我有一个以下后台Resque工作运行以下代码用于测试目的.因此,每当发布聊天消息时,其打印data就可以了.但是我如何ActionController::Live为后台工作添加功能呢?或者我如何进行此实施?需要帮助这个设计.

class ChatBoxInitiator
    @queue = :chat_box_initiator

    private
    def self.perform
    $redis.subscribe('chat_message:1:1') do |on|
            on.message do |event, data|
                puts "====#{data}"
                return data
            end
        end …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails resque redis ruby-on-rails-3

7
推荐指数
1
解决办法
1628
查看次数

写入STDOUT时,Resque作业失败并显示"Broken pipe @ io_write - <STDOUT>"(Errno :: EPIPE)

我们几年来一直在使用Resque运行后台作业,但最近开始使用以下错误消息获取失败的作业,我不确定我们的代码或我们的环境会导致这种情况发生了什么变化.

Errno::EPIPE
Broken pipe @ io_write - <STDOUT>
Run Code Online (Sandbox Code Playgroud)

每当作业调用puts(显然写入STDOUT)时,我们就会得到这个.

有谁可以请帮助阐明这一点?

ruby-on-rails resque

7
推荐指数
0
解决办法
545
查看次数