Rails延迟作业生成没有取消课程/工作代码的变化

时间:2013-05-20 18:48:31

标签: ruby-on-rails ruby ubuntu delayed-job worker

我正在运行一堆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

这应该不是问题。我也尝试重新启动服务器,但没有帮助。

有什么想法吗?

1 个答案:

答案 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(无需更改方法名称或参数),蚂蚁就可以使用。