我一直在整理一个ruby脚本,在我的网络服务器上运行git存储库(运行gitolite)并使用后接收钩。
签出文件后,我首先尝试chmod
目录,然后尝试这样的文件:
FileUtils.chmod_R(0755, Dir.glob("#{deploy_to_dir}/**/*/"))
FileUtils.chmod_R(0644, Dir.glob("#{deploy_to_dir}/**/*"))
第一个命令适用于所有目录,但只有一个:js/
。它只是没有将+x
设置为此目录 - 同时设置+r
。
以下是发生的事情:
dr-------- js/
chmod 755
js/
drw-r--r-- js/
drwxr-xr-x js/
Ich用lsattr
检查了arrtibutes。它仅提供-----------------e- ./js/
,它没有显示任何特殊内容。还有什么可能是错的吗?
直接在bash中更改它可以正常工作。 Ruby对这个目录做了什么?
答案 0 :(得分:1)
尝试撤消订单:
FileUtils.chmod_R(0644, Dir.glob("#{deploy_to_dir}/**/*"))
FileUtils.chmod_R(0755, Dir.glob("#{deploy_to_dir}/**/*/"))
否则所有文件和目录将与0644 chmod
匹配并撤消执行位。
答案 1 :(得分:0)
最后问题是,js/
或en/
是glob中的第一个目录。 => 现在它是一个bash脚本,它可以工作。
#!/bin/bash
# post-receive
# 1. Read STDIN (Format: "from_commit to_commit branch_name")
read from to branch
if [[ $branch =~ master$ ]] ; then
deploy_to_dir='/var/www/virtual/whnr/vectoflow'
GIT_WORK_TREE="$deploy_to_dir" git checkout -f master
elif [[ $branch =~ development$ ]] ; then
deploy_to_dir='/var/www/virtual/whnr/vectotest'
GIT_WORK_TREE="$deploy_to_dir" git checkout -f development
else
echo "Received branch $branch, not deploying."
exit 0
fi
# 3. chmod +r whole deploy_to_dir
find $deploy_to_dir -type d -print0 | xargs -0 chmod 755
echo "DEPLOY: Changed Permissions on all directories 755"
find $deploy_to_dir -type f -print0 | xargs -0 chmod 644
echo "DEPLOY: Changed Permissions on all files 644"