Tag: resque

Rails – 后台作业中的ActionDispatch :: Http :: UploadedFile

我正在使用与导入csv和excel Railscast类似的想法,但由于该剧集中的标准代码需要一些时间来处理(使用ActiveRecord为文件中的每一行创建新记录)我在Heroku上获得超时并希望将导入过程移至后台作业。 我没有成功将文件变量(类型为ActionDispatch :: Http :: UploadedFile)发送到作业,所以我发送了file.original_filename和file.path的各个变量。 作业失败,错误file /var/folders/q3/xn0bp7yd2m56_4lbq0069jj80000gn/T/RackMultipart20150319-72431-1a4pnja.xlsx does not exist ,我认为这种情况正在发生,因为该文件在作业开始之前已被删除: 上传的文件是临时文件,其生命周期是一个请求。 当对象完成后,Ruby取消链接文件,因此不需要使用单独的维护任务来清除它们。 ActionDispatch :: HTTP :: UploadedFile的 使用ActionDispatch :: Http :: UploadedFile上传的文件是否可以在后台作业中使用? 我正在使用Rails 4.2,ActiveJob和Resque

找到并删除延迟的resque作业

我有一个resque工作,陷入了一些糟糕的代码,并在重复失败后无限地获得reque’d。 我想以某种方式手动删除该作业,但我不确定该作业的名称在redis命名空间中是什么。 它不是’失败’,因为我抓住了实际的exception。 在exception中,我使用Resque.enqueue_in()将作业添加回resque队列。 我如何弄清楚redis中作业的名称是什么,以便我可以删除关键/作业从未发生过的事情?

Rails,Heroku,Unicorn&Resque – 如何选择网络工作者/ resque工作者的数量?

我刚刚转向在Heroku上使用Unicorn。 我也将从delayed_job切换到resque并使用http://bugsplat.info/2011-11-27-concurrency-on-heroku-cedar.html中描述的设置 我不明白这是怎么配置/ unicorn.rb: worker_processes 3 timeout 30 @resque_pid = nil before_fork do |server, worker| @resque_pid ||= spawn(“bundle exec rake ” + \ “resque:work QUEUES=scrape,geocode,distance,mailer”) end 翻译成: “这实际上会导致每个网络dyno中的六个进程:1个独角兽大师,3个独角兽网络工作者,1个resque工作者,1个真正正在处理工作的resque童工” 有多少工人会实际处理后台工作? 1还是2? 让我们说我想增加resque工人的数量 – 我会改变什么?

在resque中使用prawn在后台生成pdf

我正在尝试通过Resque后台作业在后台创建PDF文档。 我创建PDF的代码是在Rails帮助器方法中,我想在Resque工作器中使用,如: class DocumentCreator @queue = :document_creator_queue require “prawn” def self.perform(id) @doc = Document.find(id) Prawn::Document.generate(‘test.pdf’) do |pdf| include ActionView::Helpers::DocumentHelper create_pdf(pdf) end end end create_pdf方法来自DocumentHelper但我收到此错误: undefined method `create_pdf’ 有人知道怎么做吗?

apn_sender和Rails 3

我有一个项目需要从服务器发送通知到设备。 我不知道如何以及从何处开始(先创建表或其他),因为我是Ruby on Rails的新手。 我遵循apn_sender教程,但它不起作用,并且在启动时总是出错。 有没有为Rails 3创建apn_sender的完整教程? 谢谢

在更新数据库提交后运行rails代码,没有after_commit

我正在尝试与我的后台任务经理对抗一些种族案件。 基本上,我有一个Thing对象(已经存在)并为其分配一些属性,然后保存它。 使用新属性保存后,我将其排入Resque,并传入ID。 thing = Thing.find(1) puts thing.foo # outputs “old value” thing.foo = “new value” thing.save ThingProcessor.queue_job(thing.id) 后台作业将使用Thing.find(thing_id)从数据库加载对象。 问题是我们发现Resque在获取作业和从ID加载Thing对象方面非常快,它加载了一个陈旧的对象。 因此,在工作中,调用thing.foo仍将返回“旧值”,如1/100次(不是真实数据,但它不会经常发生)。 我们知道这是一个竞赛案例,因为在数据实际提交到数据库之前 ,rails将从thing.save返回(在本例中为postgresql)。 Rails中有一种方法只能在数据库操作提交后执行代码吗? 基本上我想确保在Resque加载对象时,它会得到最新鲜的对象。 我知道这可以使用Thing模型上的after_commit钩子来实现,但我不想在那里。 我只需要在这个特定的上下文中发生这种情况,而不是每次模型都提交更改为DB。

通过Resque发送Devise电子邮件

我正在尝试通过Resque发送Devise电子邮件。 通过Resque发送的常规电子邮件就好了。 并且Devise电子邮件发送得很好,但不会通过Resque发送电子邮件。 我得到“找不到有效的映射”,这意味着我的帮助程序覆盖不会被拾取。 我正在关注这个http://shaker.4-dogs.biz/2011/08/06/using-resque-to-send-mail-for-devise/ 奇怪的是,调试它我正在使用Devise的本地副本,并在Devise中的’initialize_from_record’中添加断点,当我仅使用Devise时会受到攻击。 但是当我通过resque发送Devise电子邮件时,断点不会受到影响: class ResqueMailer < Devise::Mailer include Resque::Mailer end config.mailer = "ResqueMailer" 而resque则显示一个打包的gem路径,而不是我的本地源,例如: /Users/mm/.rvm/gems/ruby-1.9.2-p290@evergreen/gems/devise-1.4.9/lib/devise/mailers/helpers.rb:20:in `devise_mail’ 知道为什么它没有使用我的本地gem源和/或如何让Resque发送我的Devise电子邮件?

如何指定一个默认队列用于所有具有Resque in Rails的作业?

我希望所有的enqueue调用都默认为某个队列,除非另有说明,所以它是DRY并且更容易维护。 为了指定队列,文档说在类中定义变量@queue = X. 所以,我尝试做以下事情并没有用,有什么想法吗? class ResqueJob class << self; attr_accessor :queue end @queue = :app end class ChildJob < ResqueJob def self.perform end end Resque.enqueue(ChildJob) Resque::NoQueueError: Jobs must be placed onto a queue. from /Library/Ruby/Gems/1.8/gems/resque-1.10.0/lib/resque/job.rb:44:in `create' from /Library/Ruby/Gems/1.8/gems/resque-1.10.0/lib/resque.rb:206:in `enqueue' from (irb):5

上帝没有运行:服务器不可用(或者你没有权限访问它)

我试图让上帝启动我的resque队列。 但是,当我运行god load config/resque.god它返回The server is not available (or you do not have permissions to access it) 这是我的resque.god文件: rails_env = ENV[‘RAILS_ENV’] || “production” rails_root = ENV[‘RAILS_ROOT’] || “/Users/andrewlynch/sites/wellness/wellbot” God.watch do |w| w.name = “resque-worker” w.group = “resque” w.interval = 60.seconds w.dir = “#{rails_root}” w.start = “RAILS_ENV=development QUEUE=* rake resque:work” w.start_grace = 30.seconds end

Resque:按用户顺序执行的时间关键作业

我的应用程序创建必须按用户顺序处理的resque作业,并且应尽可能快地处理它们(最大延迟1秒)。 例如:为user1创建job1和job2,为user2创建job3。 Resque可以并行处理job1和job3,但是应该按顺序处理job1和job2。 我对解决方案有不同的看法: 我可以使用不同的队列(例如queue_1 … queue_10)并为每个队列启动一个worker(例如rake resque:work QUEUE=queue_1 )。 用户在运行时被分配给队列/工作人员(例如,登录,每天等) 我可以使用动态“用户队列”(例如queue _#{user.id})并尝试扩展resque,一次只有1个worker可以处理队列(如Resque中所述:每个队列一个worker ) 我可以将作业放在非resque队列中,并使用“每用户元作业”和resque-lock( https://github.com/defunkt/resque-lock )来处理这些作业。 您是否有过在实践中遇到过其中一种情况的经历? 或者还有其他可能值得思考的想法吗? 我很感激任何意见,谢谢!