- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Rails 4.2.3 下,我已将 ActiveJob 设置为在所有环境中使用 delay_job 作为其后端:
环境文件
require File.expand_path('../boot', __FILE__)
require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module MyApp
class Application < Rails::Application
# ... snip
# Use delayed_job for Active Job queueing
config.active_job.queue_adapter = :delayed_job
end
end
queue_adapter
未在 config 下设置)。
Delayed::Worker.destroy_failed_jobs = false
Delayed::Worker.sleep_delay = 60
Delayed::Worker.max_attempts = 3
Delayed::Worker.max_run_time = 5.minutes
Delayed::Worker.read_ahead = 10
# Delayed::Worker.delay_jobs = true #!Rails.env.test?
Delayed::Worker.logger = Logger.new(Rails.root.join('log', 'delayed_job.log'))
class Delayed::Job < ActiveRecord::Base
belongs_to :owner, polymorphic: true
end
# Backport Rails 5 code to make the Delayed::Job database id avilable on ActiveJobs
module ActiveJob
module Core
# ID optionally provided by adapter
attr_accessor :provider_job_id
end
module QueueAdapters
class DelayedJobAdapter
class << self
send(:prepend, Module.new do
def enqueue(job)
provider_job = super
job.provider_job_id = provider_job.id
provider_job
end
def enqueue_at(job, timestamp)
provider_job = super
job.provider_job_id = provider_job.id
provider_job
end
end)
end
end
end
end
Delayed::Job
实例到模型实例上:
def schedule
job = MyJob.set(wait_until: scheduled_time).perform_later(self)
# Associate the delayed_job object with the item that has been scheduled
delayed_job = Delayed::Job.find(job.provider_job_id)
delayed_job.owner = self
delayed_job.save
end
Delayed::Job
设置了适当的关联)。
Delayed::Job.find(job.provider_job_id)
失败并引发异常,因为
provider_job_id
为零。检查日志显示
delayed_jobs
没有 SQL INSERT table 。
最佳答案
我遇到了同样的问题。原来是 ActiveJob::TestCase
劫持 perform_later
逻辑,实际上并没有将它们排队,而是将有关排队作业的数据存储在一个数组中( see here )。
我的解决方案是编写一个继承自 ActiveSupport::TestCase
的测试。相反,它似乎像正常一样排队延迟的作业。我相信有一些测试设置会强制内联执行作业,但据我所知,默认行为是将它们排队,因此它应该可以按预期工作而无需进行太多修改。
关于ruby-on-rails - 使用 delay_job 的 ActiveJob 不会在测试中创建 delay_jobs 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45147715/
我猴子修补了我的用户类(由设计支持)以像这样使用 ActiveJob: class User ActionMailer::DeliveryJob, :args=>["Devise::Mailer",
我已关注 getting started with active job EngineYard 的文章。文章指出: You'll need Rails 4.2.0beta1 or greater if
我有一个 ActiveJob,它应该通过 HTTP 从外部系统加载一段数据。该作业完成后,我想排队执行一些后处理的第二个作业,然后将数据提交到不同的外部系统。 我不想让第一份工作知道第二份工作,因为
我有以下方法: UserMailer.comment_alert(@comment, user, type).deliver_later 奇怪地在rails日志中显示了param deliver_no
我有一个 Rails 应用程序,它查询外部网络服务以更新记录。 我想继续轮询 Web 服务,直到用户 session 过期。 目前,我在显示操作中为要更新的记录创建了一个 ActiveJob。 在 A
我有一个 ActiveJob,其中的一些参数已使用 GlobalID 进行了序列化。 执行工作时,我如何急切加载一些相关模型? class Foo has_one :bar end class B
为了测试我的邮件是否已发送,我正在运行 heroku run Rails c -a my_app。然后我将作业排队,并且排队正常。但是,当我转到 Redis 并查看排队的作业时,该作业不在那里。相反,
我正在尝试在生产环境中发送邮件,但它抛出 Activejob 反序列化错误。sidekiq 在后台运行。我添加了sidekiq gem。我在 comment_notification.rb 中写了一个
查看下面的作业,我假设该作业在 low_priority 队列上运行。 class GuestsCleanupJob < ActiveJob::Base queue_as :low_priorit
我想知道在ActiveJob中是否有办法将多个作业入队?类似于 sidekiq push_bulk。 Sidekiq::Client.push_bulk(sidekiq_items) 我需要排队数千个
可以使用 Rails 的新 ActiveJob API 来对代码块进行排队吗?有时我不想生成作业并在那里移动逻辑。它将我宁愿保留在那里的知识从我的模型中移出。 让我举一个我目前正在从事的项目中的例子。
Rails 4.2、active_jobs、callback_methods 在自定义作业的执行方法中,我创建了一条新记录(并将文件上传到 S3)。如何在 after_perform 回调中传递或获取
我正在将应用程序升级到 Rails 4.2,以便我们可以利用 ActionMailer 的 deliver_later方法。一切都在发展中运作良好。当我使用 capistrano-sidekiq 部署
在将作业排入队列之前,我想检查队列并查看队列中是否已经存在具有完全相同参数的作业,在这种情况下不要将作业排入队列。但我不知道我应该如何做到这一点。是否可以? 我知道我可以使用 TestHelper 在
我已将我的应用程序升级到 Rails 版本 4.2.0.rc2。我尝试使用 sidekiq 作为 active_job 后端。它在开发环境中工作正常,但在生产环境中它使用 Inline(mailers
运行 Rails 4.2.0,所以我使用 ActiveJob 和 Sidekiq 后端。我需要调用定期安排的后台作业,所以我希望使用 Clockwork,但我还没有看到如何将它与 ActiveJob
我正在使用 Rails 的 ActiveJob,我的一项工作将原始电子邮件作为输入。调试时,这可能会导致我的应用程序日志中出现大量噪音。我怎样才能避免这种情况? [ActiveJob] Enqueue
在 Controller 的操作中,我销毁了一条记录,然后将其作为参数传递给 ActiveJob。 def destroy post = Post.find params[:id] post.
如果要创建一个 ActiveJob 并且执行块接受预期为 ActiveRecord 对象的单个实例的参数,则当作业入队时,有问题的对象存在,但在实际执行时该对象不再存在,这项工作显然会失败,对吧? M
我正在为学生构建电子邮件提醒功能。他们应该按照讲师指定的时间间隔收到一封电子邮件,表明他们取得了多少进步。 我的方法是使用 ActiveJob 来安排发送电子邮件的作业,然后在执行该作业时,我使用 a
我是一名优秀的程序员,十分优秀!