Tag: 延迟工作

将文件存储在heroku Rails上的目录tmp中

在我的延迟作业中,我尝试创建一个文件到tmp文件夹 file_path = Rails.root.join(‘tmp’, “#{file_name}.” + file_extension); exported_file = kit.to_pdf # Save file to disk File.open(file_path, ‘wb’) do |file| file << exported_file end 它在本地运行良好但在Heroku上有延迟作业中的错误“没有这样的文件或目录 – /app/tmp/test.pdf” 那我怎么能解决这个问题呢。 我不想在S3中存储文件。 谢谢

延迟作业:如何在开发模式下的每次调用期间重新加载有效负载类

我正在经营一名工作延迟的工人。 当我调用foo方法时,worker打印hello 。 class User def foo puts “Hello” end handle_asynchronously :foo end 如果我对foo方法做了一些更改,我必须重新启动worker才能反映更改。 在开发模式中,这可能变得非常烦人。 我试图找到一种方法来为每个请求重新加载有效载荷类(在本例中为User类)。 我尝试使用Monkey修补DelayedJob库,以在有效负载方法调用之前调用require_dependency 。 module Delayed::Backend::Base def payload_object_with_reload if Rails.env.development? and @payload_object_with_reload.nil? require_dependency(File.join(Rails.root, “app”, “models”, “user.rb”)) end @payload_object_with_reload ||= payload_object_without_reload end alias_method_chain :payload_object, :reload end 这种方法不起作用,因为需要在调用之前重新加载使用require_dependency注册的类,而我还没弄清楚如何执行它。 我花了一些时间阅读调度程序代码,以弄清楚Rails如何为每个请求重新加载类。 我无法找到重新加载代码。 以前有人试过这个吗? 你怎么建议我继续? 或者你有任何指针来查找Rails类重载代码?

Rails 3 / delayed_job – 通缉:延迟邮件的基本示例

我一直试图找出如何使用rails 3使用delayed_job发送延迟邮件。我已经尝试了几乎所有可行的可能性组合 – 我可以让邮件在后台运行,我只是可以’让它延迟发送到未来的时间。 数据库中的delayed_jobs表清除任务,日志显示“已发送”,delayed_job任务处理器接收任务并说发送但没有失败……但邮件是: 立即发送,或 根本就没到 如果我以后尝试发送。 如果有人能提供将来发送邮件的rails 3 delayed_job的简单例子,我真的很感激。 我相信很多人这样做,所以我怀疑我错过了一些明显的东西。 我尝试过的一种(无数种)组合: delayed_job:2.1.2 rails:3.0.3 actionmailer:3.0.3 控制器: class TestmailerController < ApplicationController def index Testmailer.delay.test_mail end end 梅勒: class Testmailer ‘(myemailaddress@removedforprivacy.com’, :from => ‘(removedforprivacy)@gmail.com’, :subject => ‘Testing Delayed Job’, :content_type => ‘text/plain’).deliver end handle_asynchronously :test_mail, :run_at => Proc.new { 2.minutes.from_now } end config / environments / […]

Delayed_job不执行perform方法但清空作业队列

我有一个新的rails 3应用程序,这是我的Gemfile: source ‘http://rubygems.org’ gem ‘rails’, ‘3.0.0’ gem ‘delayed_job’ gem ‘sqlite3-ruby’, :require => ‘sqlite3’ 这是表示我想要排队的作业的类: class Me < Struct.new(:something) def perform puts "Hello from me" logger.info "Hello from me" logger.debug "Hello from me" raise Exception.new end end 从没有工作人员运行的控制台: irb(main):002:0> Delayed::Job.enqueue Me.new(1) => # 就像我提到的:没有工人在运行: irb(main):003:0> Delayed::Job.all => [#] 我用script/delayed_job run启动一个worker 队列被清空: irb(main):006:0> Delayed::Job.all => [] […]

指示延迟作业已完成的ajax进程

我有一个Rails 3应用程序,当用户点击页面时,它使用delayed_job获取一些数据(使用类方法)。 如何向ajax进程指示类方法已运行(以便我可以停止轮询)? 编辑: 为了澄清,我想知道delayed_job何时运行,而不是在ajax进程成功时。 然后我想将delayed_job完成状态传递给正在运行的ajax进程。

Rails延迟工作和图书馆课程

嘿,我们有一个库类(lib / Mixpanel)调用延迟作业,如下所示: class Mixpanel attr_accessor :options attr_accessor :event def track!() .. dj = send_later :access_api # also tried with self.send_later .. end def access_api .. end 问题是当我们运行rake jobs:work:我们得到以下错误: undefined method `access_api’ for # 知道为什么吗?

延迟工作没有从表中挑选工作

在我目前的项目中,我正在使用Delayed Job gem在后台进行一些处理。 它在本地工作正常,但在生产作业中插入延迟作业表但DJ不从该DJ表中挑选少量作业。 任何人都可以了解Delayed Job如何从Delayed Job表中获取作业。 以下是我项目中的延迟作业代码: Delayed::Job.enqueue(ProposalJob.new(current_user, @proposal, request.host, params[:proposal][:revision_notes], params[:proposal][:close_date]), :queue => ‘publishing’) 我项目中的延迟作业配置: Delayed::Worker.destroy_failed_jobs = false Delayed::Worker.max_attempts = 3 Delayed::Worker.max_run_time = 1.hours Delayed::Worker.read_ahead = 10

让工作延迟记录

#Here is how I have delayed job set up. Delayed::Worker.backend = :active_record #Delayed::Worker.logger = Rails.logger Delayed::Worker.logger = ActiveSupport::BufferedLogger.new(“log/ ##{Rails.env}_delayed_jobs.log”, Rails.logger.level) Delayed::Worker.logger.auto_flushing = 1 class Delayed::Job def logger Delayed::Worker.logger end end if JobsCommon::check_job_exists(“PeriodicJob”).blank? Delayed::Job.enqueue PeriodicJob.new(), 0, 30.seconds.from_now end #end #Here is my simple job. class PeriodicJob def perform Rails.logger.info “Periodic job writing #{Time.now}” Delayed::Job.enqueue PeriodicJob.new(), 0, […]

如何在Amazon Elastic Beanstalk上部署rails项目时自动重启delayed_job?

我正在Amazon Elastic Beanstalk上托管一个rails项目,我尝试配置一个容器命令,以便在每次部署后自动重启服务器上的delayed_job worker。 我试过这个: container_commands: restartdelayedjob: command: “RAILS_ENV=production script/delayed_job –pid-dir=/home/ec2-user/pids start” cwd: /var/app/current 但是,似乎在重新启动worker之后部署了推送版本,因此作业无法处理作业。 当我通过ssh连接我的实例时,杀死工作进程并从已部署的版本文件夹重新启动一个新进程,一切正常。 你对我如何处理这个有什么想法吗? 谢谢

在特定日期时间延迟作业

我想通过delayed_job发送一些电子邮件 但是,我想在活动前后发送它们。 我担心的是,这实际上是否有效: def one_week_before_run AtendeeMailer.delay(run_at: ‘8th October 2016′.to_datetime).mudrun_about_to_start(self) end def thank_you_note AtendeeMailer.delay(run_at: ’18th October 2016’.to_datetime.end_of_day).thank_you(self) end 或者我应该选择另一种方法?