反引号中的文件名引用无法在resque任务中识别,但在控制台中有效

时间:2017-08-30 15:30:01

标签: ruby-on-rails ruby resque

我有一个resque任务来解压缩文件。当绝对文件名中没有空格时,此任务可以正常工作;但是,当名称中有空格时,它会失败。我在反引号中添加了文件名周围的引号(见下文),但这似乎没有对resque任务产生影响。更奇怪的是,我可以在控制台中运行确切的命令,并且它完美地运行。

这是我的代码。在下面f.filename ='russell / artificial-proto-aips / Batch 1 / rbrl-999-er-000001_bag.61440.tar.bz2':

f = JobFile.find(id)
output = `tar xjf "#{File.join( '/', 'storage', f.filename )}" -C /working 2>&1`

在控制台中运行:

2.3.0 :009 > output = `tar xjf "#{File.join( '/', 'storage', f.filename )}" -C /working 2>&1`
 => ""

运行resque任务后的输出内容:

tar (child): /storage/russell/artificial-proto-aips/Batch: Cannot open: No such file or directory\ntar (child): Error is not recoverable: exiting now\ntar: Child returned status 2\ntar: Error is not recoverable: exiting now\n

我必须承认,我对此行为感到非常困惑,但我不想告诉我的用户不要在目录名中使用空格(尽可能多)。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

虽然想出了问题。反引号调用/bin/sh,所以我的bash样式命令失败了。更新/bin/sh以指向/bin/bash将其修正。