1

我正在使用一种特殊的方法来传递电子邮件。

首先,我将发送电子邮件的方法调用抽象为控制方法send_email 。其次,我延迟了控制方法的执行。

发送一些硬编码到传递电子邮件的方法中的值似乎很好,但不是传递给该方法的值。

控制方式:

  # this method is being delayed to control the time of sending email
  def send_email

    # approach 1 : just send a email after method send_email is executed 
    # In delay situtation : after 2 minutes
    # Otherwise : no delay
    Notifier.create_long_task(1234).deliver

    # approach 2: explicitly states to delay sending email process 
    # (same result with the above one)
    # 
    # Notifier.delay.create_long_task(1234)
  end

  handle_asynchronously :send_email, :run_at => Proc.new { 2.minutes.from_now }

在上面的代码中,我将 1234 传递给了 Delivering 方法,下面的 Delivering 方法将 1234 分配给了一个实例变量@id

 def create_long_task(longTask_id)
    @greeting = "Hi"
    @longTask ="delay setting"
    @id = longTask_id

    mail to: "j-@hotmail.com", :subject => 'Long Task Created'
  end

电子邮件模板如下所示:

    Notifier#create_long_task
    Instance variable 1 : <%= @greeting %>
    Instance variable 2 : <%= @longTask %>
    Instance Id : <%= @id %>
    You created a long task 

所以乐观一点,邮件会显示 3 个实例变量,其中 2 个是硬编码在交付方法中的,一个是从外部传递到交付方法的

但结果只能显示在交付方法中硬编码的 2 个实例变量。

Notifier#create_long_task
Instance variable 1 : Hi
Instance variable 2 : delay setting
Instance Id : 
You created a long task 

这很奇怪。当我注释掉handle_asynchronously以立即发送电子邮件时,我可以看到所有实例变量。所以我认为 1234 不能传递给交付方法。没有延迟电子邮件的结果就像:

Notifier#create_long_task
Instance variable 1 : Hi
Instance variable 2 : delay setting
Instance Id : 1234
You created a long task 

这是一个很长、很复杂的问题陈述,如果有人能解决这个问题,我真的很感激。

4

1 回答 1

2

不要忘记重新启动延迟的作业,因为在您这样做之前它不会接收对您的代码的更改。

于 2012-11-11T20:14:33.727 回答