Rails延迟的作业生产不接收类/作业代码中的更改



我正在运行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(不改变方法名或参数),它将工作

最新更新