【问题标题】:How to check sublink file is present如何检查子链接文件是否存在
【发布时间】:2014-04-16 03:57:49
【问题描述】:

我在 rails projet 之外保存了一个文件,并在 rails 项目中创建了该文件的子链接,但是当我尝试检查 File.exists(sublink_file_path) 时,它返回 false。

例如:

 file_path = "shared/test.xls" #original file outside rails project.
 ln -nfs shared/test.xls current/tmp/test.xls #created a sublink in rails tmp folder. here current is my project folder.

现在像这样在控制器中获取文件路径

file_path = Rails.root + "tmp/test.xls"
File.exists?(file_path) #it return false but it should return true.

还要检查 File.exist?(file_path) 也返回 false。

如何检查 ruby​​ 中是否存在子链接文件?

我的目录结构:

 Work
   Project
     app
     config
     db
     tmp
     and so on...
  Shared

这里的项目和工作文件夹内的同一级别共享。我确信我已对文件路径和目录结构进行了更正。我担心的是我们无法将子链接路径检查为文件。

File.exist?(file_path) 它将返回 true,因为文件路径是实际的文件路径。

File.exist?(sublink_file_path) 我认为 sublink 文件路径不是返回 false 的文件

【问题讨论】:

  • Rails.root 返回路径 没有 斜杠。试试Rails.root.join('tmp', 'test.xls')
  • 不,它的返回 # 并且您的代码返回 false
  • 随便Rails.root.to_s + "tmp/test.xls"
  • @Arup 它将删除尾部斜杠并返回 work/projecttmp/test.xls 这是不正确的。
  • 我知道.. 只需给出文件系统的外观。 tmp是在project目录下还是外面?

标签: ruby-on-rails ruby file


【解决方案1】:

这不是File.exists?的问题,你只是创建了一个错误的符号链接(链接路径错误)。

使用绝对路径:

ln -nfs `pwd`/shared/test.xls current/tmp/test.xls

或者使用相对路径:

ln -nfs ../../shared/test.xls current/tmp/test.xls

然后再试一次。

【讨论】:

  • 也尝试过您提到的符号链接,但 File.exist?(symbolic_file_path) 返回错误。 symbolic_file_path = "current/tmp/test.xls" 在发布这个问题之前,我已经尝试了所有可能的区域,但有些地方出了问题。
  • @RamPatidar file current/tmp/test.xls 的结果是什么?
  • 刚刚在本地创建了一个符号链接,并使用 rails 控制台检查了这个符号文件路径,它也返回 false。
  • 你的语法正确吗?正在返回未定义的局部变量或方法“文件”
  • @RamPatidar 你看,符号链接坏了,这就是File.exist?返回false的原因。
【解决方案2】:

在我的情况下,我必须设置绝对路径,它不适用于相对路径。我用过:

ln -nsf /home/work/shared/test.xls /home/work/current/tmp/test.xls

检查符号链接是否正确创建。使用下面的命令

file "your_symbolic_link_path"

现在一切正常了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-11
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    相关资源
    最近更新 更多