2012-12-21 169 views
0

随机故障我已经除了它随机失败产生的新文件的伟大工程,一个脚本...红宝石,与File.new

这是代码:

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

,这是内error_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 /导轨/ MYAPP /发行/ 20121210093945不存在。

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

+0

在部署应用程序之后确定路径存在吗?你可能会错过'log'目录。 – tadman

+0

好吧......似乎delayed_job使用错误的部署路径.../var/www/rails/myapp/releases/20121210093945不存在。但是,正如我所说,脚本有时有效,有时候不会......如果我重新加载delayed_job,我的脚本会工作一些,然后开始失败。 –

+0

@MichDart很明显,有时它不。 –

回答

0

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

3

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

如果可能,您可能需要使用shared/log路径,因为这种路径会在部署之间持续存在。

+0

我使用Capistrano,我意识到重新启动delayed_job在每次部署之后。使用共享/日志是一个好主意,可以解决我的问题......但我想了解为什么会发生这种情况。 –

+0

我正在使用Capistrano,并且我知道每次部署后都会重新启动delayed_job。我已经使用共享/日志 –

+0

你可以在那里添加一些调试代码来抱怨什么是或不存在,甚至保存Dir.entries列表的结果。如果您的部署目录消失,有些奇怪的事情正在发生。 – tadman