Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >未及时为员工初始化的Rails方法

未及时为员工初始化的Rails方法
EN

Stack Overflow用户
提问于 2013-12-31 10:06:27
回答 1查看 1.5K关注 0票数 1

早些时候,我发布了这个问题,并认为它已经解决了:

Rails background worker always fails first time, works second

但是,在继续测试和开发之后,错误再次出现,但方式略有不同。

我使用Sidekiq ( Rails 3.2.8,Ruby1.9.3)运行后台进程after_save。下面是我的模型、工作人员和控制器的代码。

型号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

工人:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ProcessWorker
  include Sidekiq::Worker

  def perform(id, key)

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

  end
end     

(更新)主计长:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def create
  @user = current_user
  @post = @user.posts.create(params[:post])
  render nothing: true
end

每当首次分派作业时,无论采用何种方法,作业最初都会失败:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
undefined method `gsub' for nil:NilClass

然后,他们总是成功的第一次重试。

我遇到了以下github问题,这个问题似乎已经得到解决--与这个问题有关:

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

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

为了实现这一点,我尝试在lib/initializers中创建一个名为sidekiq.rb的初始化器,并使用以下方法来初始化Post模型上的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Post.first

现在,第一个创建的作业第一次成功完成。这很好。然而,第二次创建的作业第一次失败-并且在重试时完成.让我回到我开始的地方。

这真的让我大吃一惊--有人也有过同样的问题吗?任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-31 14:03:04

将模型回调从after_save更改为用于create操作的after_commit。有时,sidekiq可以在模型实际完成对数据库的保存之前初始化您的工作人员。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
after_commit :process, :on => :create
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20861526

复制
相关文章
SAP WM 有无保存WM Level历史库存的Table?
前日下班回家的路上,收到一个前客户内部顾问同行发过来的微信,问我在SAP系统里哪个表是用来存储WM Level历史库存的。
SAP虾客
2021/01/19
6700
SAP - WM - 有无保存WM Level历史库存的Table?
前日下班回家的路上,收到一个前客户内部顾问同行发过来的微信,问我在SAP系统里哪个表是用来存储WM Level历史库存的。
SAP虾客
2021/02/23
6220
最优装载问题
问题描述: 有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 问题可以描述为: 式中,变量xi = 0
我没有三颗心脏
2018/04/26
1.3K0
最优装载问题
程序的装载方式
程序执行时所需要的指令和数据必须在内存中才能够运行。最简单的就是静态装入:将程序运行所需要的指令和数据全都装入内存中。当程序所需要内存大于物理内存时,无法满足静态装入的要求,这个时候就需要使用动态装入了,其思想是将程序运行时当前不用的模块放在磁盘,使用的模块放在内存。
恋喵大鲤鱼
2019/08/14
8170
unity3d:url下载头像保存在本地(微信头像)
立羽
2023/08/24
5030
MM库存类型、库存数量、库存金额取值逻辑
*&---------------------------------------------------------------------*
齐天大圣
2021/09/08
1.3K0
浅析类装载 顶
[Loaded com.guanjian.Parent from file:/E:/classload/out/production/classload/] [Loaded com.guanjian.Child from file:/E:/classload/out/production/classload/] Parent init 100
算法之名
2019/08/20
3780
嵌入在网站上Flash播放机(2)
然后在一个博客。这里有一个flash嵌入式播放器。这是公司内部使用的flash播放机,支持格更多款式,同时支持swf格视频播放的类型。
全栈程序员站长
2022/07/06
8810
理解类装载器
类装载器是 Java 中的一项创新,它使得 Java 虚拟机可以在执行的过程中再把一个 Java 类读入虚拟机,提高了程序的灵活性。在Java中,类的信息是被保存在方法区中的。在介绍类装载器之前,我们先了解一下 Java 中类的生命周期。Java 中一个类的生命周期可以划分为以下 6 个步骤:
BUG弄潮儿
2020/08/05
9600
理解类装载器
装载问题-回溯法
问题描述:   有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量是wi,且不能超。 算法思想:   最优装载方案: 将第一艘轮船尽可能的装满;  然后将剩余的装载第二艘船上 算法描述: template <class Type> class Loading { friend Type MaxLoading(Type [],Type,int); private: void Backtrack(int i); int n;
用户1154259
2018/01/17
1.3K0
10.2 调试事件获取DLL装载
理解了如何通过调试事件输出当前进程中寄存器信息,那么实现加载DLL模块也会变得很容易实现,加载DLL模块主要使用LOAD_DLL_DEBUG_EVENT这个通知事件,该事件可检测进程加载的模块信息,一旦有新模块被加载或装入那么则会触发一个通知事件,利用该方法并配合磁盘路径获取函数则可很容易的实现进程模块加载的监控。
微软技术分享
2023/10/05
1780
10.2 调试事件获取DLL装载
SAP MM 特殊库存之T库存
笔者所在的A项目里,销售业务广泛启用了POD功能。VL02N对交货单做了发货过账后物权并没有转移,而是将自有E库存转为一个叫做在途库存的特殊库存里。等到货物到了客户那里,客户确认实际收货数量后,才去系统上执行VLPOD事务,过账后,物权才会转移到客户方那里。
SAP虾客
2021/03/01
1.8K0
动态装载和使用类型
Reflection提供诸如Microsoft Visual Basic.NET和JScript语言编译器使用的底层结构来实施隐性后绑定。绑定是定位与某一特定类型相对应的声明的过程。当这个过程发生在运行的时候,而不是编译的时候,它被称为后绑定。Visual Basic.NET使你可以在你的代码中使用隐性后绑定;VisualBasic.NET编译器调用helper 方法,使用Reflection获得对象类型。传递给helper 方法的参数 使适当的方法可以在运行时被调用。这些参数是调用方法(对象)的实例,被调用方法的名字(字符串),及传递给被调用方法的参数。(一个对象数组)。
Java架构师必看
2021/03/22
6780
装载问题 ——回溯法(Java)
有一批共n个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集 装箱i的重量为Wi,且
WHYBIGDATA
2023/01/31
7570
装载问题 ——回溯法(Java)
MM在途库存与中转库存
(Intra-Company Stock Transfer) 从同一公司中的工厂甲的库存地点A到工厂乙的库存地点B
用户5495712
2021/04/23
2.3K0
装载问题 ——分支限界法(Java)
有一批共n个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集 装箱i的重量为Wi,且
WHYBIGDATA
2023/01/31
5430
装载问题 ——分支限界法(Java)
10.2 调试事件获取DLL装载
理解了如何通过调试事件输出当前进程中寄存器信息,那么实现加载DLL模块也会变得很容易实现,加载DLL模块主要使用LOAD_DLL_DEBUG_EVENT这个通知事件,该事件可检测进程加载的模块信息,一旦有新模块被加载或装入那么则会触发一个通知事件,利用该方法并配合磁盘路径获取函数则可很容易的实现进程模块加载的监控。
微软技术分享
2023/10/11
1640
10.2 调试事件获取DLL装载
S4 MM培训课程(15)-库存报表/库存设定/特殊库存
声明:本文仅代表原作者观点,仅用于SAP软件的应用与学习,不代表SAP公司。注:文中所示截图来源SAP软件,相应著作权归SAP所有。文中所指ERP即SAP软件。
齐天大圣
2021/06/17
5920
S4 MM培训课程(15)-库存报表/库存设定/特殊库存
Spring核心——注解自动装载 原
之前的文章介绍了Spring的IoC容器配置管理方面的详细内容,需要了解的可以从IoC容器的设计模式开始阅读。在介绍基于注解配置的配置之前我们再重复一下在之前提到的基本认识:
随风溜达的向日葵
2018/08/15
7130
点击加载更多

相似问题

当库存装载c# unity3d时的奇怪行为

12

储存和装载库存

22

在数据库中存储和保存播放机背包(库存)

14

如何处理多个列表和播放机库存

22

重新装载可承受的动态库存

64
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文