Ruby chmod有效,但不适用于名为“js /”的目录

时间:2015-01-23 13:10:23

标签: ruby git bash chmod

我一直在整理一个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

以下是发生的事情:

  1. 之前:dr-------- js/
  2. Skript在chmod 755
  3. js/
  4. 之后:drw-r--r-- js/
  5. 预期:drwxr-xr-x js/
  6. Ich用lsattr检查了arrtibutes。它仅提供-----------------e- ./js/,它没有显示任何特殊内容。还有什么可能是错的吗?

    直接在bash中更改它可以正常工作。 Ruby对这个目录做了什么?

2 个答案:

答案 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"