2009-11-14 74 views
0

我的应用程序使用Collective Idea fork of Delayed Job异步发送电子邮件。问题是,这在开发环境中可以正常工作,但在生产环境中可以正常工作。工作没有失败(我检查了delayed_jobs表),他们只是没有被消耗。生产日志中没有任何记录。延迟作业正在开发中,但尚未生产

这是handlerdelayed_jobs表中的内容:

--- !ruby/struct:Delayed::PerformableMethod \ 
object: CLASS:FeedbackMailer\ 
method: :deliver_message\ 
args: \ 
- AR:Message:6\ 

—我看不到什么不对劲的地方。这是我的FeedbackMailer类:

class FeedbackMailer < ActionMailer::Base 
    def message(message, sent_at = Time.now) 
    subject = 'New Feedback Message' 
    subject = "#{subject}: #{message.subject}" if message.subject.present? 
    subject subject 
    recipients '[email protected]' 
    from  '[email protected]' 
    sent_on sent_at 
    body  :message => message 
    end 
end 

最后,这是我Message类中的相关方法:

def send_email 
    FeedbackMailer.send_later(:deliver_message, self) 
end 

我知道的ActionMailer代码正常生产,因为我之前同步测试它切换到延迟作业。正如我所说,我也一直在成功使用Delayed Job进行开发中运行它。

如果我在服务器上运行top命令,那么我可以看到延迟作业Ruby进程每隔五秒就会启动一次。我怎样才能调试呢?

+0

使用以下命令启动延迟作业:RAILS_ENV =生产脚本/ delayed_job start – Sooraj 2011-09-18 14:06:24

回答

1

约翰,

虽然我也用集体观念叉,我发现托比的脚本工作过。我只需要一个tmp/pid目录(你可能拥有这个目录),你可以获得日志文件,并且可以将你的错误列在你的Delayed :: Job.first记录中说明的这个文件交叉引用(或者当然是任何工作) 。 Script for running as a daemon from tobi fork

哦,你确实重新启动了,如果你改变了吗?不得不问。

+0

我无法解释为什么,但切换到原来的延迟作业固定它! – 2009-11-15 18:15:13

4

您是否运行了设置为-e production标志的./script/delayed_job?

+0

您使用'RAILS_ENV =生产脚本/ delayed_job start'运行叉子 – 2009-11-14 16:04:06

1

log/delayed_job.log?您提到了生产日志,但延迟作业有自己的日志。

  • [JOB]上PreviewImageJob
  • 获取锁

您可以尝试制作一个单独的类,而不是使用_later()方法。

class PreviewImageJob < Struct.new(:item_id) 
    def perform 
    item = Item.find(item_id) 
    item.generate_interior_images! 
    end 
end 
+0

我没有延迟作业的日志文件。它是一个配置选项吗?我尝试使用单独的类 - 它在开发中工作,但不在生产中。 – 2009-11-15 10:07:16

+0

生产日志目录是否可写? 'touch log/delayed_job.log'?我刚开始时就出现了,所以我记得。 – wesgarrison 2009-11-16 03:29:08