我正在运行nginx, passenger, rails, delayed_job gem的堆栈,它正在运行一个导入。从Ubuntu LTS的lib/tasks/中获取任务。
如果我在生产环境中修改代码import.rake.
I do a
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 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
(不改变方法名或参数),它将工作