2010-06-22 62 views
1

我遇到了一个奇怪的情况,在Ruby中删除文件,代码似乎报告正确,但物理文件没有从我的硬盘中删除。我可以在命令行上执行rm path/to/file - 工作。我甚至可以打通Rails的控制台和File.safe_unlink文件,并且也适用,它只是在我的Rails应用程序是无法删除的实际文件:删除的文件没有被从硬盘中删除的红宝石

def destroy 
    Rails.logger.debug local_path #=> /Users/ryan/.../public/system/.../file.jpg 
    Rails.logger.debug File.exist?(local_path) #=> true 
    File.safe_unlink(local_path) 
    Rails.logger.debug File.exist?(local_path) #=> false 
    # yet the physical file actually STILL exists! 
end 

物理文件是一个Git回购协议中(该回购是存储在/公共/系统/)任何陷阱与?我已经尝试使用ruby-git gem使用它提供的rm命令来删除文件,但是它也不会删除文件。

我已经在测试过程中打开了文件的所有权限,但仍然没有任何效果。我也用File.writable?(local_path)证实了这一点,它返回true。

任何想法,为什么它可以防止文件被删除?

回答

1

你检查了目录中的权限?删除是一个目录写操作,而不是文件写操作。 (rm也会检查文件权限,并询问你是否真的想要这样做,作为礼节性,如果该文件是写保护的;但如果该目录不可写,则不会拒绝。)

+0

好吧,我我想我只是面对自己。我从来不知道这是一个目录级别的许可,谢谢! – 2010-06-22 20:14:41