标签: fabric

通过fabric作为部署用户激活virtualenv

我想在本地运行我的结构脚本,然后登录到我的服务器,切换用户进行部署,激活项目.virtualenv,这会将dir更改为项目并发出git pull.

def git_pull():
    sudo('su deploy')
    # here i need to switch to the virtualenv
    run('git pull')
Run Code Online (Sandbox Code Playgroud)

我通常使用virtualenvwrapper中的workon命令来源激活文件,postactivate文件将把我放在项目文件夹中.在这种情况下,似乎因为结构从shell内部运行,控制权交给了结构,所以我不能使用bash的源内置'$ source~/.virtualenv/myvenv/bin/activate'

任何人都有他们如何做到这一点的例子和解释?

python automated-deploy virtualenv fabric

128
推荐指数
5
解决办法
4万
查看次数

将参数传递给Fabric任务

从命令行调用"fab"时,如何将参数传递给结构任务?例如:

def task(something=''):
    print "You said %s" % something
Run Code Online (Sandbox Code Playgroud)
$ fab task "hello"
You said hello

Done.
Run Code Online (Sandbox Code Playgroud)

是否可以在没有提示的情况下执行此操作fabric.operations.prompt

python fabric

122
推荐指数
3
解决办法
5万
查看次数

如何在Fabric文件中设置目标主机

我想使用Fabric将我的Web应用程序代码部署到开发,登台和生产服务器.我的fabfile:

def deploy_2_dev():
  deploy('dev')

def deploy_2_staging():
  deploy('staging')

def deploy_2_prod():
  deploy('prod')

def deploy(server):
  print 'env.hosts:', env.hosts
  env.hosts = [server]
  print 'env.hosts:', env.hosts
Run Code Online (Sandbox Code Playgroud)

样本输出:

host:folder user$ fab deploy_2_dev
env.hosts: []
env.hosts: ['dev']
No hosts found. Please specify (single) host string for connection:
Run Code Online (Sandbox Code Playgroud)

当我创建Fabric文档中set_hosts()显示的任务时,env.hosts设置正确.但是,这不是一个可行的选择,也不是装饰者.在命令行上传递主机最终会导致调用fabfile的某种shell脚本,我宁愿让一个工具正常工作.

它在Fabric文档中说'env.hosts只是一个Python列表对象'.根据我的观察,这根本不是真的.

谁能解释一下这里发生了什么?如何设置要部署的主机?

python host fabric

107
推荐指数
8
解决办法
6万
查看次数

使用带有Fabric的SSH密钥文件

如何使用SSH密钥文件(例如,Amazon EC2实例)配置结构以连接到远程主机?

python fabric

94
推荐指数
6
解决办法
5万
查看次数

如何在Fabric收到错误时继续执行任务

当我定义要在多个远程服务器上运行的任务时,如果任务在服务器1上运行并退出并出现错误,则Fabric将停止并中止该任务.但是我想让Fabric忽略错误并在下一个服务器上运行任务.我该怎么做呢?

例如:

$ fab site1_service_gw
[site1rpt1] Executing task 'site1_service_gw'

[site1fep1] run: echo 'Nm123!@#' | sudo -S route
[site1fep1] err:
[site1fep1] err: We trust you have received the usual lecture from the local System
[site1fep1] err: Administrator. It usually boils down to these three things:
[site1fep1] err:
[site1fep1] err:     #1) Respect the privacy of others.
[site1fep1] err:     #2) Think before you type.
[site1fep1] err:     #3) With great power comes great responsibility.
[site1fep1] err: root's password:
[site1fep1] err: sudo: route: command not …
Run Code Online (Sandbox Code Playgroud)

python fabric

93
推荐指数
6
解决办法
5万
查看次数

使用Fabric时连接到〜/ .ssh/config中列出的主机

Fabric无法识别我所拥有的主机~/.ssh/config.

我的fabfile.py情况如下:

from fabric.api import run, env

env.hosts = ['lulu']

def whoami():
    run('whoami')
Run Code Online (Sandbox Code Playgroud)

跑步$ fab whoami给出:

[lulu]跑:whoami

致命错误:lulu的名称查找失败

这个名字lulu在我的~/.ssh/config,就像这样:

Host lulu
     hostname 192.168.100.100
     port 2100
     IdentityFile ~/.ssh/lulu-key
Run Code Online (Sandbox Code Playgroud)

我首先想到的解决,这是添加类似lulu.lulu/etc/hosts(我在Mac),但后来我不得不在身份文件还传递给面料-我宁愿让我的认证(即~/.ssh/config)从我的部署分开(即fabfile.py).

顺便说一句,顺便说一句,如果你试图连接到hosts文件中的主机,fabric.contrib.projects.rsync_project似乎并没有确认"端口" hosts.env(即如果你使用hosts.env = [lulu:2100]呼叫rsync_project似乎尝试连接lulu:21).

Fabric有没有认识这个lulu名字的原因?

python ssh fabric

83
推荐指数
3
解决办法
3万
查看次数

如何使用Fabric将目录复制到远程计算机?

我在本地计算机上有一个目录,我想使用Fabric将其复制到远程计算机(并重命名).我知道我可以使用复制文件put(),但是目录呢.我知道使用scp很容易,但fabfile.py如果可能的话,我宁愿在我内部做到这一点.

python fabric

77
推荐指数
3
解决办法
6万
查看次数

如何在没有错误的情况下git提交任何内容?

我正在尝试编写一个可以执行的结构脚本git commit; 但是,如果没有提交,git退出状态为1.部署脚本将其视为不成功,并退出.我确实想要检测实际的失败提交,所以我不能仅仅给织物一个忽略git commit失败的问题.如何允许忽略空提交失败,以便部署可以继续,但仍然捕获真正提交失败时导致的错误?

def commit():
    local("git add -p && git commit")
Run Code Online (Sandbox Code Playgroud)

python git fabric

73
推荐指数
4
解决办法
2万
查看次数

你如何使用pip,virtualenv和Fabric来处理部署?

您的设置,技巧以及最重要的工作流程是什么?

这些工具很棒但是仍然没有附加到它们的最佳实践,因此我不知道使用它们的最有效方法是什么.

  • 你使用pip包还是总是下载?
  • 你手动设置Apache/Cherokee/MySQL还是有脚本?
  • 你把所有东西都放在virtualenv中并使用--no-site-packages吗?
  • 你有几个项目使用virtualenv吗?
  • 你使用Fabric做什么(你编写部署的哪一部分)?
  • 您是将Fabric脚本放在客户端还是服务器上?
  • 您如何处理数据库和媒体文件迁移?
  • 你有没有需要像SCons这样的构建工具?
  • 部署的步骤是什么?你多久经常表演一次?
  • 等等

python deployment pip virtualenv fabric

66
推荐指数
2
解决办法
1万
查看次数

在远程shell中使用Fabric进行run()调用时,是否可以捕获错误代码?

通常,只要run()调用返回非零退出代码,Fabric就会退出.但是,对于某些电话,这是预期的.例如,PNGOut在无法压缩文件时返回错误代码2.

目前我只能通过使用shell逻辑(do_something_that_fails || truedo_something_that_fails || do_something_else)来绕过这个限制,但我宁愿能够将我的逻辑保存在普通的Python中(就像Fabric承诺一样).

有没有办法检查错误代码并对其做出反应而不是让Fabric出现恐慌并死掉?我仍然想要其他调用的默认行为,因此通过修改环境来改变它的行为似乎不是一个好的选择(据我所知,你只能使用它来告诉它警告而不是死亡).

python error-handling fabric

64
推荐指数
2
解决办法
4万
查看次数

标签 统计

fabric ×10

python ×10

virtualenv ×2

automated-deploy ×1

deployment ×1

error-handling ×1

git ×1

host ×1

pip ×1

ssh ×1