我在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仓库中(仓库存储在/ public / system /中)任何陷阱吗?我尝试使用ruby-git gem使用它提供的rm命令删除文件,但这也不会删除文件。
我在测试过程中打开了文件的所有权限,但仍无效。我也用File.writable确认了这一点?(local_path)返回true。
有什么想法可能会阻止文件被删除?
答案 0 :(得分:1)
您是否检查了目录的权限?删除是目录写操作,而不是文件写操作。 (rm
还将检查文件权限,并询问您是否真的想要这样做,如果文件是写保护的话,这是礼貌的;但如果目录不可写,那么它就会拒绝。)