Ruby chmod可以工作,但对于一个名为;js/”的;
我一直在编写一个ruby脚本,该脚本在我的Web服务器(运行gitolite)上用一个post recieve钩子Delpoy一个git存储库 签出文件后,我尝试先Ruby chmod可以工作,但对于一个名为;js/”的;,ruby,git,bash,chmod,Ruby,Git,Bash,Chmod,我一直在编写一个ruby脚本,该脚本在我的Web服务器(运行gitolite)上用一个post recieve钩子Delpoy一个git存储库 签出文件后,我尝试先chmod目录,然后再按如下方式查看文件: FileUtils.chmod_R(0755,Dir.glob(“{deploy_to_Dir}/***/”) FileUtils.chmod_R(0644,Dir.glob(“#{deploy_to_Dir}/***”)) 第一个命令适用于除一个目录以外的所有目录:js/。它只是没有将+
chmod
目录,然后再按如下方式查看文件:
FileUtils.chmod_R(0755,Dir.glob(“{deploy_to_Dir}/***/”)
FileUtils.chmod_R(0644,Dir.glob(“#{deploy_to_Dir}/***”))
第一个命令适用于除一个目录以外的所有目录:js/
。它只是没有将+x
设置到此目录,同时设置+r
下面是发生的情况:
dr------js/
js/
drw-r--r--js/
drwxr-xr-x js/
lsattr
检查了arrtibutes。它只给出了------------e-./js/
,没有显示任何特殊的内容。还有什么可能是错误的吗
在bash中直接更改它可以很好地工作。Ruby对这个目录做了什么?尝试颠倒顺序:
FileUtils.chmod_R(0644, Dir.glob("#{deploy_to_dir}/**/*"))
FileUtils.chmod_R(0755, Dir.glob("#{deploy_to_dir}/**/*/"))
否则,所有文件和目录都将被0644
chmod
匹配,并撤消您的执行位。最后的问题是,js/
或en/
是全局中的第一个目录。=>现在它是一个bash脚本,可以正常工作
#/bin/bash
#后接
# 1. 读取STDIN(格式:“从提交到提交分支名称”)
通读
如果[[$branch=~master$];然后
部署到目录='/var/www/virtual/whnr/vectoflow'
GIT_WORK_TREE=“$deploy_to_dir”GIT签出-f master
elif[$branch=~ development$];然后
部署到目录='/var/www/virtual/whnr/vectotest'
GIT_WORK_TREE=“$deploy_to_dir”GIT checkout-f development
其他的
echo“已收到分支$branch,未部署。”
出口0
fi
# 3. chmod+r整个部署到目录
查找$deploy_to_dir-type d-print0 | xargs-0 chmod 755
echo“部署:更改所有目录的权限755”
查找$deploy_to_dir-type f-print0 | xargs-0 chmod 644
echo“部署:更改所有文件的权限644”
目录结构中的js/
在哪里?第二个chmod调用将取消x位的设置,看起来它正在将其应用到您的js目录中。这些都是密码吗?您的脚本如何区分目录和文件?@HunterMcMillen-The-js/处于第一级。那么就在{deploy\u to\u dir}
@iamnotmaynard中,它没有?!也许是在用**/*/?我明天再查。然而,第二个命令并没有撤销所有其他目录的x位,这一点更为神秘。这再次导致了相同的错误:/js
不想接受chmod+x
。所以我试着删除文件夹。然后,在en/
之前工作的新添加文件夹也出现了相同的情况。现在我将以其他方式触发脚本。这不是真正的问题。globs只处理文件和目录。它适用于所有其他文件。