gpt4 book ai didi

Python Fabric 本地和远程部署

转载 作者:行者123 更新时间:2023-11-30 23:05:13 27 4
gpt4 key购买 nike

我使用 Fabric 来自动执行许多在本地计算机或远程服务器上运行的任务。

所有任务都是单独进行的。但我想要的是有一个新任务,在本地计算机上执行一些工作(构建图像并上传)并在服务器上执行一些工作(重新加载服务器)

如果我手动运行命令,它们会起作用:

fab build_file
fab remote deploy_file

这是一个输出:

> fab remote deploy_file
[localhost] Executing task 'remote'
[docker.me] Executing task 'deploy_file'
[docker.me] run: echo 'reload image'
[docker.me] out: reload image
[docker.me] out:


Done.
Disconnecting from docker.me... done.

但是如果我尝试结合本地和远程任务,这就是我得到的:

> fab do_all
[localhost] Executing task 'do_all'
[localhost] local: echo 'make image'
make image
[localhost] local: echo 'upload image'
upload image
[localhost] run: echo 'reload image'

Fatal error: Low level socket error connecting to host localhost on port 22: Connection refused (tried 1 time)

Underlying exception:
Connection refused

Aborting.

有没有办法在单个 Uber 任务中同时执行本地和远程任务?

我的 fabfile.py:

from fabric.api import *

env.run = local
env.hosts = ['localhost']

@task
def remote():
env.run = run
env.hosts = ["docker.me"]

@task
def build_file():
env.run("echo 'make image'")
env.run("echo 'upload image'")


@task
def deploy_file():
env.run("echo 'reload image'")


@task
def do_all():
build_file()
remote()
deploy_file()

最佳答案

我可能没有捕获重点,但你为什么不简单地做这样的事情

from fabric.api import *

env.hosts = ['docker.me']

@task
def all():
local("echo 'make image'")
local("echo 'upload image'")
run("echo 'reload image'")

编辑:

我明白了。你的代码基本没问题。只有一个小细节。使用以下代码应该没问题:

from fabric.api import *

env.run = local
env.hosts = ["docker.me"] # change this!

@task
def remote():
env.run = run

@task
def build_file():
env.run("echo 'make image'")
env.run("echo 'upload image'")

@task
def deploy_file():
env.run("echo 'reload image'")

@task
def do_all():
build_file()
remote()
deploy_file()

关于Python Fabric 本地和远程部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33273142/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com