私はメールを配信するために特別なアプローチを使用しています。
まず、電子メールを配信するためのメソッドの呼び出しを制御メソッドに抽象化します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を配信メソッドに渡しました。配信メソッドの下では、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つは配信メソッドにハードコーディングされ、1つは外部から配信メソッドに渡されます
ただし、結果には、配信メソッドにハードコーディングされている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
これは非常に長く複雑な問題の説明です。誰かがこの問題を解決できるかどうか本当に感謝しています。