服务器上的生产环境中的延迟作业失败

时间:2011-11-09 04:14:25

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

我正在使用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应用程序中使用的环境。

  • Rails 3.0.8
  • Linux中的Ruby 1.9.2(Ubuntu)
  • rake 0.9.2
  • delayed_job 2.1.4

这和 Undefined Method Error when creating delayed_job workers with script/delay_job

但解决方案对我不起作用。

4 个答案:

答案 0 :(得分:5)

我明白了。这是由于打包“ libyaml ”包,我的本地系统上没有,但是已经安装在服务器上。

答案 1 :(得分:0)

在部署一些新代码时,是否有可能没有停止并启动delayed_job工作程序?如果在部署之前运行的工作程序尝试运行新方法,则它将失败。

答案 2 :(得分:0)

在工作进程中运行的YAML(或Syck)是否可能不知道有问题的方法?看看:

https://github.com/collectiveidea/delayed_job/wiki/Common-problems#wiki-jobs_are_silently_removed_from_the_database

......相关部分是:

  

反序列化错误的一个常见原因是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