我有两个同时要排队的工作,并且有一个 worker 连续运行它们。这两个作业都从我的Rails项目的根目录中的builds/
目录复制一些文件,并将它们放置在一个临时文件夹中。
第一个工作总是成功,永远不会有问题-哪个工作先运行也没关系。第一个将工作。
第二个尝试复制文件时收到此错误:
No such file or directory - /Users/apps/Sites/my-site/releases/20130829065128/builds/foo
该发布文件夹已经有两个星期的历史了,不应再放在服务器上。它是空的,仅包含一个public/uploads目录,没有其他内容。我杀死了我所有的 worker ,并多次重启了他们,并多次重新部署了Rails应用程序。当我删除该发布目录时,它将再次进入。
我目前不知道该怎么办。为什么这个工作人员总是在这个旧发行目录中创建/查找?为什么只有第二个 worker 这样做?我通过使用以下方式获取路径:
Rails.root.join('builds')
-Rails.root显然是2周大的capistrano版本?我还应该提到,这仅在生产环境中发生。我能做什么?
最佳答案
救援未在部署上重新启动(停止和启动),这导致运行旧版本的代码。每个工作人员继续为队列服务,从而导致奇怪的错误或行为。
根据路径名,看起来您正在使用Capistrano进行部署。
您在使用capistrano-resque gem吗?如果没有,您应该看一下。
关于ruby-on-rails - 在Resque作业期间,Rails.root指向生产中的错误目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18820899/