我在Capistrano上遇到问题,其中File.readlines
和File.foreach
声称文件不存在,但确实存在。当发生错误时,我可以正确复制返回的错误并正确复制cat
或nano
文件。
if File.readlines("#{fetch(:application)}/.git/config").grep(/#{fetch(:old_repo_url)}/).size > 0
这输出类似:
Errno::ENOENT: No such file or directory @ rb_sysopen - ~/Develop/homestead/code/projectname/.git/config
我可以复制该位置和位置,并且它[[确实存在。因为没有文件扩展名,它无法读取吗?
如果我无法grep git config文件,也许还有其他方法可以检查git config当前是否包含旧的repo URL变量?如果可以保存以下内容的输出:
execute "cd #{fetch(:homestead_path)}/#{fetch(:application)}; git remote get-url origin"
对于一个变量,甚至要检查,那都很好。
~
扩展为您的$HOME
的完整路径。 Ruby不知道那是什么,并假定~
是文字目录名,尝试打开该文件,但由于~
不存在而失败。
并且,当您再次从shell复制并测试它时,它会扩展~
,并且您确信Ruby是错误的。
修复简单:
File.expand_path('~/.vimrc') #=> "/Users/ttm/.vimrc"
File类具有像expand_path
这样的几种方法,用于扩展和转换路径。我建议您研究文档,因为它们非常强大且非常有用。