jjzjj

git - Vagrant - 摊铺机 devstack 错误 : "[Errno 20] Not a directory"

coder 2023-06-25 原文

我正在尝试通过 Vagrant 安装 edx Devstack,我在 Windows 机器上。我收到的错误似乎是由 Windows 不支持的符号链接(symbolic link)引起的。

根据 Dealing with line endings and symlinks under Windows 下的 edx 故障排除指南,我应该在 cygwin 中运行以下命令来处理符号链接(symbolic link)。

git rm --cached -r . && git reset --hard

git config --global alias.add-symlink '!__git_add_symlink(){
    dst=$(echo "$2")/../$(echo "$1"); 
    if [ -e "$dst" ]; then 
        hash=$(echo "$1" | git hash-object -w --stdin); 
        git update-index --add --cacheinfo 120000 "$hash" "$2"; 
        git checkout -- "$2"; 
    else 
        echo "ERROR: Target $dst does not exist!"; 
        echo "       Not creating invalid symlink."; 
    fi; 
    }; __git_add_symlink "$1" "$2"'

git config --global alias.rm-symlink '!__git_rm_symlink(){
    git checkout -- "$1"; link=$(echo "$1"); 
    POS=$'\''/'\''; DOS=$'\''\\\\'\''; 
    doslink=${link//$POS/$DOS}; 
    dest=$(dirname "$link")/$(cat "$link"); 
    dosdest=${dest//$POS/$DOS}; 
    if [ -f "$dest" ]; then 
        rm -f "$link"; 
        cmd //C mklink //H "$doslink" "$dosdest"; 
    elif [ -d "$dest" ]; then 
        rm -f "$link"; 
        cmd //C mklink //J "$doslink" "$dosdest"; 
    else 
        echo "ERROR: Something went wrong when processing $1 . . ."; 
        echo "       $dest may not actually exist as a valid target."; 
    fi; 
    }; __git_rm_symlink "$1"'

git config --global alias.rm-symlinks '!__git_rm_symlinks(){
    for symlink in `git ls-files -s | grep -E "^120000" | cut -f2`; 
    do 
        git rm-symlink "$symlink"; 
        git update-index --assume-unchanged "$symlink"; 
    done; 
    }; __git_rm_symlinks'

git config --global alias.checkout-symlinks '!__git_checkout_symlinks(){
    POS=$'\''/'\''; DOS=$'\''\\\\'\''; 
    for symlink in `git ls-files -s | grep -E "^120000" | cut -f2`; 
    do 
        git update-index --no-assume-unchanged "$symlink"; 
        if [ -d "$symlink" ]; then 
            dossymlink=${symlink//$POS/$DOS}; 
            cmd //C rmdir //S //Q "$dossymlink"; 
        fi; 
        git  checkout -- "$symlink"; 
        echo "Restored git symlink $symlink <<===>> `cat $symlink`"; 
    done; 
    }; __git_checkout_symlinks'

git rm-symlinks

我还尝试了对 Git symlinks in Windows 的 SO 回答中的命令,产生相同的结果。

输出:

运行上述命令后得到的输出有点奇怪,所以我不确定脚本是否成功。

User@Computer /cygdrive/c/.../Local/devstack/edx-platform/edx-platform $./symlinks-fix.sh
**Git checkout output**
...
Checking out files: 100% (6983/6983), done.
HEAD is now at 222bdd9 Merge pull request #10411 from edx/mobile/course-blocks-api

Microsoft Windows [Version 6.2.9200]
(c) 2012 Microsoft Corporation. All rights reserved.

C:\Users\...\Local\devstack\edx-platform\edx-platform>

为什么最后会进入Windows风格的命令提示符?这是我不确定 git 命令是否正常工作的地方。

在 Vagrant 中:

运行 vagrant upvagrant ssh 后,运行 paver devstack lms 时出现以下错误(与 paver 的输出类似开发栈工作室):

vagrant@precise64:~$ sudo su edxapp
edxapp@precise64:~/edx-platform$ paver devstack lms
...
pip install -q --disable-pip-version-check --exists-action w -r requirements/edx/github.txt
  Could not find a tag or branch '96e1922348bfe6d99201b9512a9ed946c87b7e0b', assuming commit.
  .... 20 similar ....
  Could not find a tag or branch 'e7a6c95c300e95c51e42bfd1eba70489c05a6527', assuming commit.

pip install -q --disable-pip-version-check --exists-action w -r requirements/edx/local.txt
pip install -q --disable-pip-version-check --exists-action w -r requirements/edx/base.txt
  Requested meliae==0.4.0 (from -r requirements/edx/base.txt (line 47)), but installing version 0.4.0.final.0
pip install -q --disable-pip-version-check --exists-action w -r requirements/edx/post.txt
python manage.py cms --settings=devstack reindex_course --setup
2015-11-06 01:37:40,353 WARNING 4797 [xblock.plugin] plugin.py:147 - Unable to load XBlock 'html'
    Traceback...
IOError: [Errno 20] Not a directory: '/edx/app/edxapp/edx-platform/common/lib/xmodule/xmodule/js/common_static/js/vendor/draggabilly.pkgd.js'
2015-11-06 01:37:40,660 WARNING 4797 [xblock.plugin] plugin.py:147 - Unable to load XBlock 'course_info'
    Traceback...
IOError: [Errno 20] Not a directory: '/edx/app/edxapp/edx-platform/common/lib/xmodule/xmodule/js/common_static/js/vendor/draggabilly.pkgd.js'
    Traceback...
IOError: [Errno 20] Not a directory: '/edx/app/edxapp/edx-platform/common/lib/xmodule/xmodule/js/common_static/js/vendor/draggabilly.pkgd.js'
    Traceback ...
IOError: [Errno 20] Not a directory: '/edx/app/edxapp/edx-platform/common/lib/xmodule/xmodule/js/common_static/js/vendor/draggabilly.pkgd.js'
    Traceback ...
IOError: [Errno 20] Not a directory: '/edx/app/edxapp/edx-platform/common/lib/xmodule/xmodule/js/common_static/js/vendor/draggabilly.pkgd.js'

Build failed running pavelib.servers.devstack: Subprocess return code: 1

据我所知,这是符号链接(symbolic link)的问题(请参阅 this Google 群组上的帖子)。

我是否正确运行了上述符号链接(symbolic link)脚本?如何检查符号链接(symbolic link)是否已成功处理?

其他尝试:

按照google群里的建议(上面的链接),我也做了如下调整:

  • 设置 VAGRANT_USE_VBOXFS = true
  • 使用提供的 Vagrantfile here
  • 设置环境变量 OPENEDX_RELEASE="named-release/cypress"
  • 从 Vagrant 实例安装 libxmlsec1。

在多次 vagrant destroyvagrant provision 之后,我仍然有相同的 IOError: [Error 20] Not a directory 问题。任何帮助将不胜感激!

版本:

  • Windows 版本:8
  • Vagrant 版本:1.7.4
  • VirtualBox 版本:5.0.8
  • openEdx 版本:named-release/cypress

最佳答案

我认为问题是你的cydrive路径不对造成的。

尝试改变c:\cygwin\etc\fstab

none/cydrive cygdrive binary,posix=0,user 0 0

无/cygdrive 二进制,posix=0,用户 0 0

引用:https://cygwin.com/cygwin-ug-net/using.html#cygdrive

更新:

在 CMD 中键入“bash”,然后复制/粘贴脚本的内容

如果你得到相同的结果尝试:

打开 .gitconfig(使用 Notepad++ 或类似工具)并添加此部分(如果尚不存在)

[alias]
add-symlink = "!__git_add_symlink(){\n    dst=$(echo \"$2\")/../$(echo \"$1\"); \n    if [ -e \"$dst\" ]; then \n        hash=$(echo -n \"$1\" | git hash-object -w --stdin); \n        git update-index --add --cacheinfo 120000 \"$hash\" \"$2\"; \n        git checkout -- \"$2\"; \n    else \n        echo \"ERROR: Target $dst does not exist!\"; \n        echo \"       Not creating invalid symlink.\"; \n    fi; \n    }; __git_add_symlink \"$1\" \"$2\""
rm-symlink = "!__git_rm_symlink(){\n    git checkout -- \"$1\"; link=$(echo \"$1\"); \n    POS=$'/'; DOS=$'\\\\\\\\'; \n    doslink=${link//$POS/$DOS}; \n    dest=$(dirname \"$link\")/$(cat \"$link\"); \n    dosdest=${dest//$POS/$DOS}; \n    if [ -f \"$dest\" ]; then \n        rm -f \"$link\"; \n        cmd //C mklink //H \"$doslink\" \"$dosdest\"; \n    elif [ -d \"$dest\" ]; then \n        rm -f \"$link\"; \n        cmd //C mklink //J \"$doslink\" \"$dosdest\"; \n    else \n        echo \"ERROR: Something went wrong when processing $1 . . .\"; \n        echo \"       $dest may not actually exist as a valid target.\"; \n    fi; \n    }; __git_rm_symlink \"$1\""
rm-symlinks = "!__git_rm_symlinks(){\n    for symlink in `git ls-files -s | grep -E \"^120000\" | cut -f2`; \n    do \n        git rm-symlink \"$symlink\"; \n        git update-index --assume-unchanged \"$symlink\"; \n    done; \n    }; __git_rm_symlinks"
checkout-symlinks = "!__git_checkout_symlinks(){\n    POS=$'/'; DOS=$'\\\\\\\\'; \n    for symlink in `git ls-files -s | grep -E \"^120000\" | cut -f2`; \n    do \n        git update-index --no-assume-unchanged \"$symlink\"; \n        if [ -d \"$symlink\" ]; then \n            dossymlink=${symlink//$POS/$DOS}; \n            cmd //C rmdir //S //Q \"$dossymlink\"; \n        fi; \n        git  checkout -- \"$symlink\"; \n        echo \"Restored git symlink $symlink <<===>> `cat $symlink`\"; \n    done; \n    }; __git_checkout_symlinks"

这将为符号链接(symbolic link)创建一些 git 命令

注意:文件使用 Unix 行尾,请勿使用 Windows 记事本编辑!

然后执行命令

git rm --cached -r .
git reset --hard
git rm-symlinks

我在我的环境中测试过它,它可以工作

关于git - Vagrant - 摊铺机 devstack 错误 : "[Errno 20] Not a directory",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33561942/

有关git - Vagrant - 摊铺机 devstack 错误 : "[Errno 20] Not a directory"的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  4. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  5. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  6. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  7. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  8. ruby - RVM "ERROR: Unable to checkout branch ."单用户 - 2

    我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas

  9. ruby - 如何关闭 ruby​​ gem "Spreadsheet?"中的文件 - 2

    下面的代码在我第一次运行它时就可以正常工作:require'rubygems'require'spreadsheet'book=Spreadsheet.open'/Users/me/myruby/Mywks.xls'sheet=book.worksheet0row=sheet.row(1)putsrow[1]book.write'/Users/me/myruby/Mywks.xls'当我再次运行它时,我会收到更多消息,例如:/Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:11

  10. ruby - Ruby 语法糖有 "rules"吗? - 2

    我正在学习Ruby的基础知识(刚刚开始),我遇到了Hash.[]method.它被引入a=["foo",1,"bar",2]=>["foo",1,"bar",2]Hash[*a]=>{"foo"=>1,"bar"=>2}稍加思索,我发现Hash[*a]等同于Hash.[](*a)或Hash.[]*一个。我的问题是为什么会这样。是什么让您将*a放在方括号内,是否有某种规则可以在何时何地使用“it”?编辑:我的措辞似乎造成了一些困惑。我不是在问数组扩展。我明白了。我的问题基本上是:如果[]是方法名称,为什么可以将参数放在括号内?这看起来几乎——但不完全是——就像说如果你有一个方法Foo.d

随机推荐