我正在使用delayed_job gem在我的rails应用中发送电子邮件。 delayed_job运行良好,但是从最近5天起,它无效并在delayed_job.log文件中抛出以下错误。
2011-10-09T01:53:04+0530: [Worker(delayed_job host:backupserver pid:23953)] Syck::DomainType#private_group_join_request failed with NoMethodError: undefined method private_group_join_request' for # - 11 failed attempts 2011-10-09T01:53:04+0530: [Worker(delayed_job host:backupserver pid:23953)] 1 jobs processed at 1.4503 j/s, 1 failed ... 2011-10-09T01:54:40+0530: [Worker(delayed_job host:backupserver pid:23953)] Syck::DomainType#contact_us_email failed with NoMethodError: undefined method contact_us_email for # - 11 failed attempts 2011-10-09T01:54:40+0530: [Worker(delayed_job host:backupserver pid:23953)] 1 jobs processed at 4.3384 j/s, 1 failed ...
以下是我如何调用发送电子邮件延迟工作的示例之一。
UserMailer.delay(:run_at => 10.seconds.from_now).contact_us_email(self)
我开始推迟工作
RAILS_ENV=production script/delayed_job start
它在我的本地计算机上的开发和生产环境中正常工作。
我在Rails应用程序中使用的环境。
这和 Undefined Method Error when creating delayed_job workers with script/delay_job
但解决方案对我不起作用。
答案 0 :(得分:5)
我明白了。这是由于打包“ libyaml ”包,我的本地系统上没有,但是已经安装在服务器上。
答案 1 :(得分:0)
在部署一些新代码时,是否有可能没有停止并启动delayed_job工作程序?如果在部署之前运行的工作程序尝试运行新方法,则它将失败。
答案 2 :(得分:0)
在工作进程中运行的YAML(或Syck)是否可能不知道有问题的方法?看看:
......相关部分是:
反序列化错误的一个常见原因是YAML引用 工人不知道的一个班级。如果是这种情况,您可以添加
# file: config/initializers/custom.rb require 'my_custom_class'
将强制my_custom_class在工作人员启动时加载。
答案 3 :(得分:0)
我不得不手动重新启动生产服务器上的独角兽,因为出于某种原因,封盖部署并没有为我做这件事。
所以我必须做的是:
sudo /etc/init.d/unicorn_myapp stop
sudo /etc/init.d/unicorn_myapp start
但是独角兽无法启动,所以我不得不
sudo rm /tmp/unicorn.my_app.sock
并且
sudo /etc/init.d/unicorn_myapp start