Tag: resque

Rails:after_create停止保存时出现exception

简单的问题。 我有一个ActiveRecord模型,我希望在保存记录后执行后期处理。 所以在模型中我有一个queue_for_processing方法,可以将作业粘贴到我的Resque队列中。 为了在我的记录成功持久化后执行此操作,我在我的模型中编写了以下内容: after_create :queue_for_processing 很简单。 我原以为一切都按预期工作除了昨晚我的redis服务器发生故障,事情发生了变化。 我的期望是记录仍然会被保存,我可以稍后手动处理该作业。 但是queue_for_processing方法抛出exception(预期行为)并停止保存记录。 我误解了after_create是如何工作的吗? 或者我的理解是否正确并且发生了什么时髦? 谢谢。

即使从生产模式下的服务器运行,Resque也会写入开发数据库

当我在生产中启动我的应用程序以在推出到服务器之前测试它时,我注意到我的一个数据库操作由Resque.enqueue(worker)调用,在WRONG数据库上执行! development.sqlite3而不是production.sqlite3。 我正在运行服务器和resque零配置文件。 必须有一些方法可以在正确的环境中运行redis或resque。 defaults: &defaults host: localhost port: 6379 development: <<: *defaults test: <<: *defaults staging: <<: *defaults production: <<: *defaults 我找到的这个redis配置文件可以保存密钥,但redis不喜欢它,说 *** FATAL CONFIG FILE ERROR *** Reading the configuration file, at line 1 >>> ‘defaults: &defaults’ Bad directive or wrong number of arguments

重新启动resque中特定工作程序的失败作业

我的应用程序中运行了大约5个队列。 我对重新启动所有失败的作业不感兴趣。 我只想重新启动属于一个worker的失败作业。 我正在使用带有rails的Resque。 我在/ resque页面中看到“重试失败的作业”选项。 但是,如何重新启动属于一个工作程序的失败作业?

在Heroku上使用PDFKit生成文件 – 没有这样的文件或目录

我正在使用PDFKit从Heroku Cedar上的Resque作业中的给定URL创建pdf。 我的代码看起来像: kit = PDFKit.new(url) pdf = kit.to_file(“/tmp/#{SecureRandom.hex}.pdf”) 然后我使用雾将文件上传到S3以进行永久存储。 这项工作通常有效,但也可能在三分之一的时间内失败: No such file or directory – /tmp/a05c165fc80878b75fd15c447695de71.pdf 手动运行控制台中的代码将产生相同的错误。 根据Heroku文档,我应该能够在Cedar的应用程序目录中的任何位置编写临时文件。 我已经尝试首先创建tmp目录(在控制台中),但似乎没有改变任何东西。 也没有保存到“#{Rails.root} / tmp /#{SecureRandom.hex} .pdf”。 任何想法将不胜感激。 UPDATE 控制台中的完整错误是: Error: Failed loading page http://grist.org/living/you-look-great-in-green-clothing-industry-gets-a-makeover-maybe.html (sometimes it will work just to ignore this error with –load-error-handling ignore) Errno::ENOENT: No such file or directory – /tmp/55a1d418074736decfd4e123d8e2bba2.pdf 似乎这可能是来自wkhtmltopdf的错误,但是,如果我通过PDFkit使用wkhtmltopdf,我不知道在哪里添加此标志。

Rails,Heroku和Resque:长时间运行的背景作业优化

我们正在构建一个火种风格的应用程序,允许用户“喜欢”或“不喜欢”事件。 每个活动都有大约100个与之关联的关键字。 当用户“喜欢”或“不喜欢”和事件时,我们将该事件的关键字与用户相关联。 用户可以快速获得数千个关键字。 我们使用表格将用户和事件与关键字(event_keywords和user_keywords)相关联。 直通表有一个额外的列relevant_score,它是一个浮点数(例如,如果关键字非常relevance_score ,则关键字可以是0.1,如果它非常相关则可以是0.9)。 我们的目标是根据用户的关键字向用户展示最相关的活动。 所以Events有许多属于用户的event_rankings。 从理论上讲,我们希望为每个用户对所有事件进行不同的排名。 以下是模型: User.rb: has_many :user_keywords, :dependent => :destroy has_many :keywords, :through => :user_keywords has_many :event_rankings, :dependent => :destroy has_many :events, :through => :event_rankings Event.rb has_many :event_keywords, :dependent => :destroy has_many :keywords, :through => :event_keywords has_many :event_rankings, :dependent => :destroy has_many :users, :through => :event_rankings UserKeyword.rb: belongs_to […]

单工dyno的并行背景任务

我们有一个Rails应用程序,其中某些请求在具有delayed_job的worker dyno上触发长时间运行的任务,而前端轮询直到它收到结果。 我们的流量虽小但增长很快,而且任务通常只需几秒钟即可完成,但最多可能需要一分钟。 现在,每个web和worker dyno都应该足以处理我们的负载。 问题是,delayed_job队列不会并行处理作业,因此较长的任务最终会阻碍其后面的任务。 我们正在寻找的是类似Unicorn的后端,其中单个工作人员dyno可以同时处理多个任务。 因为它是Rails,我们正在寻找多进程而不是multithreading的东西。 (我们尝试在procfile中创建多个worker条目 – 这在本地开发框中工作,但不在Heroku上工作) Procfile: web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb # Multiple workers defined here doesn’t translate into multiple processes on single worker dyno: worker: bundle exec rake jobs:work worker: bundle exec rake jobs:work worker: bundle exec rake jobs:work 这篇Heroku文章建议使用resque-pool gem作为解决方案。 这是唯一的解决方案,还是delayed_job也可以用于并行后台作业?

将文件传递给活动作业/后台作业

我通过标准文件输入在请求参数中收到一个文件 def create file = params[:file] upload = Upload.create(file: file, filename: “img.png”) end 但是,对于大型上传,我想在后台工作中执行此操作。 像Sidekiq或Resque这样的流行后台作业选项依赖于Redis来存储参数,所以我不能只通过redis传递文件对象。 我可以使用Tempfile ,但在某些平台上,例如Heroku,本地存储不可靠。 我有什么选择让它在“任何”平台上可靠?

resque调度程序作业的奇怪行为

所以有些背景,我在这里得到了一些建议: 在Ruby on Rails中调度事件 并且今天一直在努力实施它。 我似乎无法让它工作。 这是我的调度程序作业,用于在延迟队列和准备发送队列之间移动我的问题(我决定使用电子邮件而不是短信) require ‘Assignment’ require ‘QuestionMailer’ module SchedulerJob @delayed_queue = :delayed_queue @ready_queue def self.perform() @delayed_queue.each do |a| if(Time.now >= a.question.schedule) @ready_queue << a @delayed_queue.delete(a) end end push_questions end def self.gather() assignments = Assignment.find :all assignments.each do |a| @delayed_queue << a unless @delayed_queue.include? a end end private def self.push_questions @ready_queue.each do […]

使用Resque和resque_mailer发送电子邮件会引发路由错误

我正在尝试使用Resque和resque_mailer gem在Rails 3中使用后台作业发送电子邮件。 不使用Resque时电子邮件被正常发送,但当它们作为后台作业处理时,作业无法引发ActionView::Template::Error ,我已追溯到我试图在电子邮件上打印的链接。 这是冲突的界限: link_to t(‘.here’), topic_url(@comment.topic, :load_all => true, :anchor => “c#{@comment.id}”) 即使尝试打印root_url引发类似的exception。 有没有人有任何关于为什么失败的想法? 我几乎尝试了一切:( 提前致谢!

Heroku的后台工作解决方案?

我已经在Heroku的旧堆栈(Aspen和Bamboo)上使用了Delayed Job,但是使用他们新的(ish)Cedar堆栈,我想尝试一些更高效的东西。 我正在执行的特定后台工作是对不同运营商(UPS,FedEx,USPS等)的API调用,我通常每小时处理数千个。 我需要能够同时处理作业以快速通过队列。 最重要的是,我想尝试降低成本。 在我以前使用延迟工作的堆栈中,我不得不加快工作人员的工作,这会大大增加我的成本。 那么,在Heroku上,对我来说什么是一个很好的后台工作解决方案?