簡體   English   中英

使用 script/delay_job 創建delayed_job 工作者時出現未定義的方法錯誤

[英]Undefined Method Error when creating delayed_job workers with script/delay_job

運行多個工人有點問題。

當創建具有rake jobs:work作業運行沒有問題,即使多次調用它,但是當使用ruby script/delayed_job -n 5 start all jobs 在Syck::DomainType上使用未定義的方法創建工作人員時。

我已經搜索了很多,但似乎找不到解決方案。 我在 Mongoid 后端運行 DelayedJob。 寶石版本:

  • 耙子 0.9.2
  • 導軌 3.0.6
  • 延遲作業 2.1.4
  • delayjob_mongoid 1.0.2

有沒有人遇到過類似的錯誤/有解決方案? 或者缺少一些關於為什么/如何根據調用方式不同創建工作人員的信息?

我有同樣的問題。 我可以通過在控制台中加載作業並嘗試反序列化來重現它:

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

在我的生產環境中,我得到了一個 Syck::DomainType object 而在開發中它只是反序列化了我的 object(存儲在 db 中的數據在兩種情況下都是相同的)。

長話短說,我意識到我的服務器上有 ruby 1.9.1 而不是 1.9.2。 使用 ruby-1.9.2p290 切換到 rvm 托管環境為我解決了這個問題。

也許ruby script/delayed_job -n 5 start all不會調用Bundler.setup ,這就是為什么它不同於其他啟動工作人員的方式? (只是猜測)

您可以通過將其放在config/application.rb的頂部來修復Syck::DomainType錯誤

require 'yaml'
YAML::ENGINE.yamler = 'syck'
# [...]
require File.expand_path('../boot', __FILE__)

感謝這個答案:rails error, could't parse YAML

如果存在 libyaml,則問題似乎源自 bundler >= 1.0.10 加載 psych 並覆蓋某些 sycks 功能。 我能夠從我的系統中刪除 libyaml 安裝,我知道這對每個人來說都是不可能的。 很難追查,希望這篇文章對其他人有幫助

運行它:

bundle exec ./script/delayed_job -n 5 start

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM