我正在使用一种特殊的方法来传递电子邮件。
首先,我将发送电子邮件的方法调用抽象为控制方法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
这是一个很长、很复杂的问题陈述,如果有人能解决这个问题,我真的很感激。