使用script / delay_job创建delayed_job worker时出现未定义的方法错误

时间:2011-07-20 18:09:53

标签: ruby-on-rails ruby mongoid delayed-job

在运行多个工作人员时遇到一些问题。

创建具有rake jobs:work作业的作业时,即使在多次调用时也会运行,但是当ruby script/delayed_job -n 5 start all创建具有Syck::DomainType个作业的作业失败并使用未定义的方法时。

我搜索了很多,但似乎无法找到解决方案。我在Mongoid后端运行DelayedJob。宝石版本:

  • rake 0.9.2
  • rails 3.0.6
  • delayedjob 2.1.4
  • delayedjob_mongoid 1.0.2

是否有人遇到类似错误/有解决方案?或者没有根据调用它们的方式来创建工人为什么/如何创建的一些信息?

4 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题。我可以通过在控制台中加载作业并尝试反序列化来重现它:

$ rails console production
> j = Delayed::Job.last
> YAML.load(j.handler)

在我的生产环境中,我得到了一个Syck :: DomainType对象,而在开发中它只是反序列化了我的对象(存储在db中的数据在两种情况下都是相同的。)

长话短说,我意识到我的服务器上有ruby 1.9.1而不是1.9.2。使用ruby-1.9.2p290切换到rvm托管环境解决了我的问题。

答案 1 :(得分:0)

也许ruby script/delayed_job -n 5 start all没有调用Bundler.setup,这就是为什么它与其他推出工作人员的方式不同? (只是一个猜测)

您可以将Syck::DomainType置于config/application.rb

的顶部来解决require 'yaml' YAML::ENGINE.yamler = 'syck' # [...] require File.expand_path('../boot', __FILE__) 错误
{{1}}

感谢您的回答:rails error, couldn't parse YAML

答案 2 :(得分:0)

看起来问题来自于捆绑器> = 1.0.10加载精神并覆盖一些sycks功能,如果存在libyaml。我能够从我的系统中删除libyaml安装,我知道这对每个人都是不可能的。很难追查,希望这篇文章能帮助别人

答案 3 :(得分:0)

使用以下命令运行:

bundle exec ./script/delayed_job -n 5 start