queued_mail 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.rdoc CHANGED
@@ -30,7 +30,7 @@ ActionMailer::Base#deliverでを実際のメール送信ではなくジョブキ
30
30
 
31
31
  Gemfile
32
32
 
33
- gem 'queued_mail', '~> 0.2.5'
33
+ gem 'queued_mail', '~> 0.2.6'
34
34
 
35
35
  bundle install
36
36
 
@@ -93,6 +93,14 @@ Gemfile
93
93
  config.mail_queue_name = '1で作成したキューの名前'
94
94
 
95
95
 
96
+ == メール取りだしのリトライ設定
97
+
98
+ DBのコミット前にキューを取得してしまった場合など、ジョブ実行の段階でメッセージを取得できない可能性に対処するため、指定回数までメールの取得を試みるようにしました。
99
+
100
+ config.mail_queue_retry_limit = 3 # 3回まで再試行する(最初の1回+再試行3回)
101
+ config.mail_queue_retry_interval = 5 # 5秒後に再試行
102
+
103
+
96
104
  == TODO
97
105
 
98
106
  - Workerとかめんどくさい人用 cronで叩けるコントローラ
@@ -11,5 +11,7 @@ module QueuedMail
11
11
  config.mail_queue_name = :mail_queue
12
12
  config.mail_queue_outbound_delivery_method = :sendmail
13
13
  config.mail_queue_outbound_mailer = 'QueuedMail::Mailer'
14
+ config.mail_queue_retry_interval = 5
15
+ config.mail_queue_retry_limit = 3
14
16
  end
15
17
  end
@@ -3,17 +3,36 @@ module QueuedMail
3
3
  @queue = Rails.application.config.mail_queue_name.to_sym
4
4
 
5
5
  def self.perform(args)
6
- message = QueuedMail::Message.find(args["message_id"].to_i)
6
+ retried = 0
7
+ begin
8
+ message = QueuedMail::Message.lock.find(args["message_id"].to_i)
9
+ rescue ActiveRecord::RecordNotFound => e
10
+ if retried < retry_limit
11
+ retried += 1
12
+ sleep retry_interval
13
+ retry
14
+ else
15
+ raise e
16
+ end
17
+ end
7
18
 
8
- message.lock!
9
19
  mailer.original_email(message).deliver
10
20
  message.destroy
11
21
  rescue ActiveRecord::RecordNotFound => e
22
+ Rails.logger.error e.message
12
23
  # nothing raises
13
24
  end
14
25
 
15
26
  def self.mailer
16
27
  @mailer ||= instance_eval(Rails.application.config.mail_queue_outbound_mailer)
17
28
  end
29
+
30
+ def self.retry_limit
31
+ Rails.application.config.mail_queue_retry_limit
32
+ end
33
+
34
+ def self.retry_interval
35
+ Rails.application.config.mail_queue_retry_interval
36
+ end
18
37
  end
19
38
  end
@@ -1,3 +1,3 @@
1
1
  module QueuedMail
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: queued_mail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-12 00:00:00.000000000 Z
12
+ date: 2012-11-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails