ruby-on-rails-3.1 – 使用Thin或Unicorn在生产环境中运行delayed_job时,作业处理程序序列化不正确

我最近把delayed_job带到了我的Rails 3.1.3应用程序中.开发中
一切都好.我甚至将我的DJ发布在与我相同的VPS上
生产应用程序使用相同的生产应用程序服务器(Thin),
一切都很好.然而,一旦我发布到生产,所有
地狱破裂:没有任何工作进入工作表
正确地说,我开始在所有日志中看到以下内容
加工工作:

2012-02-18T14:41:51-0600: [Worker(delayed_job host:hope pid:12965)] 
NilClass# completed after 0.0151 
2012-02-18T14:41:51-0600: [Worker(delayed_job host:hope pid:12965)] 1 
jobs processed at 15.9666 j/s,0 Failed ...

NilClass并没有方法名称?当然不正确.所以我看了看
数据库中作业的序列化处理程序并看到:

"--- !ruby/object:Delayed::PerformableMethod\nattributes:\n  id: 13\n 
event_id: 26\n  name: memememe\n  api_key: !!null \n"

没有类或方法名称的指示.当我加载YAML时
一个对象,并在我得到的PerformableMethod上调用#object
零.为了踢,我然后在破碎的生产上启动控制台
应用程序和推迟相同的工作.这次处理程序看起来像:

"--- !ruby/object:Delayed::PerformableMethod\nobject: !ruby/ 
ActiveRecord:Domain\n  attributes:\n    id: 13\n    event_id: 26\n 
name: memememe\n    api_key: !!null \nmethod_name: :create_a\nargs: [] 
\n"

当然,这项工作运行良好.困惑,我接着回忆起读书
一些关于DJ不能与Thin玩得很好的东西.所以,我试过Unicorn和
很遗憾的看到了同样的结果.我想以后的研究时间
这与应用服务器如何加载YAML有关
图书馆Psych和Syck以及DJ与他们的互动.我不能,
然而,确切地说明了什么是错的.

请注意,我正在运行delayed_job 3.0.1官方,但已尝试升级
主分支甚至尝试降级到2.1.4.
以下是我的舞台和制作之间的一些显着差异
设置:

>在阶段我在TCP端口上运行1个瘦服务器 – 前面没有Web代理
>在生产中,我使用Nginx运行2个瘦服务器和代理.
他们通过UNIX套接字交谈
>当我尝试独角兽时,它是由Nginx代理的1个app服务器
UNIX套接

网络代理/ Nginx可以与它有关吗?拜托,非常感谢任何见解.我花了很多时间
整合delayed_job并且不愿意搁置工作,或者更糟糕的是,
扔了它.谢谢阅读.

解决方法

我通过不使用#delay来解决这个问题.相反,我用自定义作业替换了所有“model.delay.method”代码.这样做就像一个魅力,最终更灵活.此修复程序适用于Thin.我没有用Unicorn测试过.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...