Tôi có ứng dụng Rails trong đó tôi sử dụng delay_job. Tôi muốn phát hiện tôi có đang trong quá trình delay_job hay không; một cái gì đó nhưKiểm tra xem tôi có đang trong quá trình hoãn_job hay không
if in_delayed_job?
# do something only if it is a delayed_job process...
else
# do something only if it is not a delayed_job process...
end
Nhưng tôi không thể tìm ra cách. Đây là những gì tôi đang sử dụng hiện nay:
IN_DELAYED_JOB = begin
basename = File.basename $0
arguments = $*
rake_args_regex = /\Ajobs:/
(basename == 'delayed_job') ||
(basename == 'rake' && arguments.find{ |v| v =~ rake_args_regex })
end
Một giải pháp khác là, như @MrDanA nói:
$ DELAYED_JOB=true script/delayed_job start
# And in the app:
IN_DELAYED_JOB = ENV['DELAYED_JOB'].present?
nhưng họ IMHO giải pháp yếu. Bất cứ ai có thể đề xuất một giải pháp tốt hơn?
Đây có phải là phương pháp không? Điều gì về việc gửi cho nó một lá cờ để chỉ ra nếu công việc đang được gọi từ công việc bị trì hoãn hay không. Nó có thể chỉ mặc định là false, chỉ được thiết lập khi thực sự được gọi từ Job bị trì hoãn. Giải pháp nhanh chóng và dễ dàng nếu bạn không thể tìm thấy bất cứ điều gì khác. – MrDanA
Vâng, đó là giải pháp khác (tôi nghĩ bạn có nghĩa là 'DELAYED_JOB = true script/delay_job start'), nhưng tôi nghĩ nó cũng là một giải pháp yếu, bởi vì tôi phải nhớ đặt hoặc bỏ đặt biến khi tôi khởi động ứng dụng với delay_job hoặc không phải là – mdesantis
Phương pháp này có tự động chạy khi Công việc bị trì hoãn bắt đầu không? Tôi giả sử bạn đã làm một cái gì đó như thế này thay vì: 'user.delay.send_email' một nơi nào đó trong mã của bạn. Sau đó, bạn chỉ có thể thay đổi dòng đó thành 'user.delay.send_email (true)' trong đó 'true' biểu thị nó đang được gọi là một phần của công việc bị trì hoãn. – MrDanA