我正在运行一堆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
查看是否有任何延迟作业,并且从上面运行delayed_job停止命令后,我看到的是
[server_name] 9426 6168 0 18:46 pts/0 00:00:00 grep --color=auto delayed_job
这应该不是问题。我也尝试重新启动服务器,但没有帮助。
有什么想法吗?
答案 0 :(得分:1)
延迟作业在代码排队时序列化代码的实例,因此除非您更改通过调用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
(无需更改方法名称或参数),蚂蚁就可以使用。