Ruby,随机失败的File.new

时间:2012-12-21 17:28:22

标签: ruby delayed-job

我有一个效果很好的脚本,除了随机生成新文件失败...

这是代码:

...
file_log_path = File.join(Rails.root, 'log', "xls_import_#{Time.now.to_i}.log")
@log = File.new(file_log_path, 'w+')
....

这是delayed_job.log

中的错误
2012-12-21T18:18:41+0100: [Worker(delayed_job host:webserver2.netbanana.it pid:24482)] LoadDataFromCsv failed with Errno::ENOENT: No such file or directory - /var/www/rails/myapp/releases/20121210093945/log/xls_import_1356110321.log - 0 failed attempts
2012-12-21T18:18:41+0100: [Worker(delayed_job host:webserver2.netbanana.it pid:24482)] PERMANENTLY removing LoadDataFromCsv because of 1 consecutive failures.

其他时候,它有效!有人可以帮帮我吗?

- 编辑:

嗯......似乎Rails.root使用了错误的部署路径......实际上/ var / www / rails / myapp / releases / 20121210093945不存在。

但是,正如我所说,脚本有时会起作用,有时候不会......如果我重新加载delayed_job,我的脚本会运行一些,然后开始失败。

2 个答案:

答案 0 :(得分:3)

如果您正在使用Capistrano来管理您的版本,我猜这是基于路径结构的情况,那么您需要注意引用可在部署发生后删除的路径。每次部署时都需要重新启动DelayedJob,或者它可能在孤立目录中工作。

如果可能,您可能希望使用shared/log路径,因为在部署之间会一直存在。

答案 1 :(得分:0)

我发现了几个delayed_job进程(僵尸),仍在运行......全部杀死它们(不是metallica的歌曲)现在它可以工作了!