###現象
2種類のメッセージをメール送信するプログラムがあります。
フレームワーク無しの素Rubyです(ActiveRecordは使ってます)
それぞれをcronから実行しているのですが、メインクラスがPGが稼働中の時に、Childクラスが起動すると、
メインクラスのメッセージも送付される現象があり原因が分からず困っております。
処理詳細
Parentがメインとなり、Childは継承して送信するメッセージが異なります。
この2つのPGをcronから呼び出して実行してます。
- Parent・・・ 1分毎
- Child・・・ 30秒毎
以下ソースでは省略していますが、メール送信中かどうかはテーブル管理しており、
Parentは1件でも送信中があれば処理終了となり、Childはステータスに関わらず常に送信OKとしています。
疑問点
それぞれ別起動でRubyが動いているのですが、子が起動した時に稼働している親クラスのプロセス?メモリ情報は共有されてしまうのでしょうか?
そんなアホなという事でしたら、恐らく他にバグが潜んでいるのでしょう。。。
ご教授のほどよろしくお願いします。
追記
原因は以下のところな気がします。
mail = Child.new mail.execute
executeした時に、Parent側の以下も実行されているようです。
mail = Parent.new mail.execute
class外のところなので、継承した際には無視されると思っていました。
このような場合、どう記述するのが正攻法なのでしょうか?
メインクラス
require_relative 'base' # Baseは必要なファイルをrequireしているだけ class Parent < Base def send_check 送信中にテーブルのステータスが送信中の場合は処理終了 end def execute return unless send_check targets.ech do | target | -- 省略 -- 送信中にテーブルのステータスを変更する ------- mail = Mail.new(message) mail.send(to_address) end end def message 'parent message!' end def targets -- 省略 -- Parentの場合は大量の送信対象を返す end end mail = Parent.new mail.execute
子クラス
require_relative 'Parent' class Child < Parent def send_check # 常にOK true end def targets -- 省略 -- Childは1件のみ返す。 Parentと対象者が被る事はない end def message 'child message!' end end mail = Child.new mail.execute
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/18 06:22