คุณจะบอก Delayed :: Job ให้ทำงานในคอนโซลได้อย่างไร


96

ด้วยเหตุผลบางประการ Delayed :: Job ได้ตัดสินใจที่จะเข้าคิว แต่ไม่ได้ดำเนินการใด ๆ แม้ว่าฉันจะรีสตาร์ทหลายครั้งแม้จะฆ่า -9 และเริ่มต้นใหม่ก็ตาม มันจะไม่ทำงานใด ๆ

ฉันสามารถระบุงานที่เฉพาะเจาะจงและสั่งให้ทำงานใน / คอนโซลได้หรือไม่

เช่น .. Delayed::Job.find(x).run


เป็นไปได้ที่จะซ้ำกันของงานซ้ำด้วยตนเองใน Delayed_job
smathy

คำตอบ:


131

ตอบวิธีเรียกใช้งานเฉพาะจากคอนโซล:

Delayed::Job.find(x).invoke_job

แต่คุณต้องจำไว้ว่ามันจะไม่ดำเนินการอย่างอื่นเช่นทำลายงานที่ทำไปแล้ว เพียงแค่เรียกใช้งาน / งาน


4
อ่านอย่างละเอียดทราบผู้เขียนคำตอบที่: "มันจะไม่ทำงานสิ่งอื่น ๆ เช่นการทำลายงานที่ได้ทำ" ฉันพูดอย่างนั้นเพราะฉันไม่ได้อ่านมันและฉันก็เริ่มบ้า ตรวจสอบคำตอบของ @ DavidTuite
fguillen

165

คุณสามารถทำได้ดังนี้:

Delayed::Worker.new.run( Delayed::Job.find(x) ) 

26
นี่คือคำตอบที่ดีที่สุดซึ่งจะลบงานหลังจากเสร็จสิ้น ขอบคุณ
m4risU

12
Delayed :: Worker.new.run (Delayed :: Job.find (id))
mrt

ฉันเห็นด้วยกับความคิดเห็นของ @mrt คุณควรแน่ใจว่าคุณทำงานถูกต้อง
จอนนี่

หากฉันต้องการเรียกใช้งานที่ล่าช้าหลายงานในคิวเฉพาะฉันจะทำได้อย่างไร? โปรดช่วย
Zia Qamar

สิ่งเดียวที่ไม่ทำคือทำเครื่องหมายแถวว่าล็อค
phil

0

เกี่ยวกับ Heroku ฉันมีงานที่ "ติดขัด" และต้องวิ่งheroku restartเพื่อให้คนงาน / งานเริ่มต้นใหม่อีกครั้ง


ขอบคุณสำหรับความคิดเห็นในเชิงบวก ;-) อาจเป็นได้ว่าคนที่ถาม - หรือคนที่ถามคำถามนี้ - มีปัญหากับ Heroku
rassom
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.