Ruby chmod 有效,但不适用于一个名为 "js/" 的目录
Ruby chmod works, but not for one directory called "js/"
我一直在整理一个 ruby 脚本,该脚本在我的网络服务器(运行 gitolite)上使用 post -接收挂钩。
检出文件后,我尝试先 chmod
目录,然后是这样的文件:
FileUtils.chmod_R(0755, Dir.glob("#{deploy_to_dir}/**/*/"))
FileUtils.chmod_R(0644, Dir.glob("#{deploy_to_dir}/**/*"))
第一个命令适用于除一个目录之外的所有目录:js/
。它只是不将 +x
设置到这个目录——同时设置 +r
.
情况如下:
- 之前:
dr-------- js/
- Skript 在
js/
上 chmod 755
- 之后:
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/
是 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"
我一直在整理一个 ruby 脚本,该脚本在我的网络服务器(运行 gitolite)上使用 post -接收挂钩。
检出文件后,我尝试先 chmod
目录,然后是这样的文件:
FileUtils.chmod_R(0755, Dir.glob("#{deploy_to_dir}/**/*/"))
FileUtils.chmod_R(0644, Dir.glob("#{deploy_to_dir}/**/*"))
第一个命令适用于除一个目录之外的所有目录:js/
。它只是不将 +x
设置到这个目录——同时设置 +r
.
情况如下:
- 之前:
dr-------- js/
- Skript 在
js/
上 - 之后:
drw-r--r-- js/
- 预计:
drwxr-xr-x js/
chmod 755
我用 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/
是 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"