Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby chmod可以工作,但对于一个名为;js/”的;_Ruby_Git_Bash_Chmod - Fatal编程技术网

Ruby chmod可以工作,但对于一个名为;js/”的;

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/。它只是没有将+

我一直在编写一个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/
。它只是没有将
+x
设置到此目录,同时设置
+r

下面是发生的情况:

  • 之前:
    dr------js/
  • SKcript在
    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只处理文件和目录。它适用于所有其他文件。