结构部署“mkdir -p”给出套接字错误“没有这样的文件或目录”,但命令在ssh中工作

问题描述 投票:0回答:2

我正在使用fabric3将django项目部署到ubuntu(16.04)服务器。该代码包括使用mkdir -p制作目录(如果需要)。代码段:

from fabric.api import env, local, run
(...)
def _create_directory_structure_if_necessary(site_folder):
    for subfolder in ('database', 'static', 'virtualenv', 'source'):
        run(f'mkdir -p {site_folder}/{subfolder}')

当我运行fab deploy:[email protected]时,我收到以下错误:

[[email protected]] Executing task 'deploy'
[[email protected]] run: mkdir -p /home/ubuntu/sites/my.site.com/database

Fatal error: Low level socket error connecting to host my.site.com on port 22: No such file or directory (tried 1 time)

Underlying exception:
    No such file or directory

Aborting.

生成的目录是正确的,并且服务器上已存在具有工作网站的此文件结构。如果我ssh到服务器,mkdir -p /home/ubuntu/sites/my.site.com/database工作没有错误。为什么命令在ssh窗口中工作,而不在Fabric脚本中工作?

详细信息:使用Amazon Web Services EC2服务器,使用默认的ubuntu用户。 App使用django,nginx,gunicorn,Python3.6。我正在关注Harry Percival的书Test-Driven Development with Python。从Mac OS X部署。

python django amazon-web-services ubuntu fabric
2个回答
0
投票

问题在于密钥文件的路径在目录名称中有空格。我使用了引用的路径名来容纳这个:

env.key_filename = '~/"Bad Foldername/aws/keyname.pem"'

将密钥移动到没有空格的路径并消除额外的引号。


0
投票

我遇到了同样的问题,但这是因为密钥文件在给定路径中不存在。

修复是在指定的路径添加env.key_filename文件,它的工作原理!

© www.soinside.com 2019 - 2024. All rights reserved.