Rails方法未及时为工作人员初始化

煤层气

之前,我曾发布过此问题-并认为已解决:

Rails后台工作者总是第一次失败,第二次工作

但是,在继续测试和开发之后,该错误又回来了,但是方式有所不同。

我正在使用Sidekiq(与Rails 3.2.8,Ruby 1.9.3一起)运行后台进程after_save。下面是我的模型,工作人员和控制器的代码。

模型:

class Post < ActiveRecord::Base

  attr_accessible :description, 
                  :name,
                  :key 

  after_save :process

  def process
    ProcessWorker.perform_async(id, key) if key.present?
    true
  end

  def secure_url
    key.match(/(.*\/)+(.*$)/)[1]
  end

  def nonsecure_url
    key.gsub('https', 'http')
  end

end

工人:

class ProcessWorker
  include Sidekiq::Worker

  def perform(id, key)

    post = Post.find(id)
    puts post.nonsecure_url

  end
end     

(已更新)控制器:

def create
  @user = current_user
  @post = @user.posts.create(params[:post])
  render nothing: true
end

无论何时采用哪种方法,无论何时首次调度作业,它们最初都会失败:

undefined method `gsub' for nil:NilClass

然后,它们总是在第一次重试时成功。

我遇到了以下github问题,该问题似乎已解决–与同一问题有关:

https://github.com/mperham/sidekiq/issues/331

在这里,人们说如果他们创建初始化程序来初始化模型上的ActiveRecord方法,那么它可以解决他们的问题。

为此,我尝试在lib / initializers中创建一个名为sidekiq.rb的初始化程序,并使用以下内容来简单地初始化Post模型上的方法:

Post.first

现在,创建的第一个作业首次成功完成。很好 但是,创建的第二份工作第一次失败-并在重试后完成...使我回到开始的地方。

这真的让我大吃一惊–有人遇到过同样的问题吗?任何帮助表示赞赏。

救援创意

从更改模型回调after_saveafter_commitcreate行动。有时,sidekiq可以在模型实际完成保存到数据库之前初始化您的worker。

after_commit :process, :on => :create

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails方法未及时为工作人员初始化

来自分类Dev

为多重处理的每个工作人员初始化每个实例

来自分类Dev

Google Cloud数据流:如何每个工作人员(单个)仅初始化一次Hikari连接池?

来自分类Dev

排除工作人员

来自分类Dev

简化后台工作人员的匿名方法

来自分类Dev

后台工作人员冻结WPF

来自分类Dev

DynamicSupervisors的工作人员名称

来自分类Dev

后台工作人员中的ShowDialog

来自分类Dev

停止后台工作人员

来自分类Dev

为每天1000万以上的工作队列扩展工作人员

来自分类Dev

如何实现在Rails工作人员中都能正常工作的层次结构或子模块?

来自分类Dev

我可以在工作人员内部获取我的sidekiq工作人员的ID吗?

来自分类Dev

由工作人员引起的Heroku Web工作人员超时

来自分类Dev

从专门的工作人员访问共享工作人员

来自分类Dev

避免为不同类中使用的类似背景工作人员重复代码

来自分类Dev

R doParallel foreach,为独立工作人员提供错误处理

来自分类Dev

避免为不同类中使用的类似背景工作人员重复代码

来自分类Dev

Azure-为工作人员/ Web角色启用诊断

来自分类Dev

在 Apache Spark 上为每个工作人员创建一个单例

来自分类Dev

如何在Rails sidekiq工作人员调用的视图中使用帮助程序?

来自分类Dev

Workless Gem v-1.2.3无法在Rails 4.2中缩减工作人员

来自分类Dev

Phusion Passenger Rails 没有在工作人员之间平衡请求

来自分类Dev

将工作人员的数据保存到数据库中的列中(rails、resque)

来自分类Dev

如何查找导致.NET方法导致工作人员停止的原因

来自分类Dev

如何正确取消永远工作的后台工作人员?

来自分类Dev

分布式工作人员的体系结构

来自分类Dev

与工作人员“线程”等效的asyncio.Queues

来自分类Dev

如何根据队列长度扩展工作人员角色

来自分类Dev

通过网站与工作人员角色进行沟通

Related 相关文章

  1. 1

    Rails方法未及时为工作人员初始化

  2. 2

    为多重处理的每个工作人员初始化每个实例

  3. 3

    Google Cloud数据流:如何每个工作人员(单个)仅初始化一次Hikari连接池?

  4. 4

    排除工作人员

  5. 5

    简化后台工作人员的匿名方法

  6. 6

    后台工作人员冻结WPF

  7. 7

    DynamicSupervisors的工作人员名称

  8. 8

    后台工作人员中的ShowDialog

  9. 9

    停止后台工作人员

  10. 10

    为每天1000万以上的工作队列扩展工作人员

  11. 11

    如何实现在Rails工作人员中都能正常工作的层次结构或子模块?

  12. 12

    我可以在工作人员内部获取我的sidekiq工作人员的ID吗?

  13. 13

    由工作人员引起的Heroku Web工作人员超时

  14. 14

    从专门的工作人员访问共享工作人员

  15. 15

    避免为不同类中使用的类似背景工作人员重复代码

  16. 16

    R doParallel foreach,为独立工作人员提供错误处理

  17. 17

    避免为不同类中使用的类似背景工作人员重复代码

  18. 18

    Azure-为工作人员/ Web角色启用诊断

  19. 19

    在 Apache Spark 上为每个工作人员创建一个单例

  20. 20

    如何在Rails sidekiq工作人员调用的视图中使用帮助程序?

  21. 21

    Workless Gem v-1.2.3无法在Rails 4.2中缩减工作人员

  22. 22

    Phusion Passenger Rails 没有在工作人员之间平衡请求

  23. 23

    将工作人员的数据保存到数据库中的列中(rails、resque)

  24. 24

    如何查找导致.NET方法导致工作人员停止的原因

  25. 25

    如何正确取消永远工作的后台工作人员?

  26. 26

    分布式工作人员的体系结构

  27. 27

    与工作人员“线程”等效的asyncio.Queues

  28. 28

    如何根据队列长度扩展工作人员角色

  29. 29

    通过网站与工作人员角色进行沟通

热门标签

归档