[英]Rails Delayed Job production not picking up change in class/job code
我正在运行一堆nginx,passenger,rails,delayed_job gem,它在Ubuntu LTS上从lib / tasks /运行import.rake任务。
如果我在生产上将代码更改为import.rake。
我做
RAILS_ENV=production script/delayed_job stop
touch tmp/restart.txt
ps aux | egrep '(PID|nginx)'
sudo kill -HUP [PID]
RAILS_ENV=production script/delayed_job start
但是,它仍然无法识别我对import.rake的更改。 我不知所措。 也许我没有想到什么?
我跑了
ps -ef | grep delayed_job
看看是否有任何挥之不去的工作,从所有上面运行delay_job stop命令后,我看到的是
[server_name] 9426 6168 0 18:46 pts/0 00:00:00 grep --color=auto delayed_job
这不应该是一个问题。 我也尝试过重启服务器,但无济于事。
有任何想法吗?
延迟工作序列化时,它入列代码的实例 ,所以除非你改变由你的rake任务调用的代码,而不是rake任务本身调动也无济于事。
要解决此问题,请在重新部署之间更改的代码与通过延迟作业调用的代码脱钩。 因此,您可以执行以下操作来代替MyLogic.delay.do_stuff
:
class DelayedTask
def self.do_stuff
self.new.delay.execute
end
private
def execute
MyLogic.do_stuff
end
end
然后,只需从您的代码中调用DelayedTask.do_stuff
,就可以以MyLogic.do_stuff
的任何方式更改MyLogic.do_stuff
(而无需更改方法名称或参数),并且它可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.