fabric(http://docs.fabfile.org/en/1.7/)是否支持Python 3.根据Python 3超级大国之墙它还没有.如果不是,如果在Python 3中使用Django 1.5,那么最佳选择是什么.
我正在使用Fabric在远程服务器上运行命令.我在该服务器上连接的用户具有一些sudo权限,并且不需要密码即可使用这些权限.当SSH进入服务器时,我可以运行sudo blah
并执行命令而不提示输入密码.当我尝试通过Fabric的sudo
功能运行相同的命令时,系统会提示我输入密码.这是因为Fabric在使用时以下列方式构建命令sudo
:
sudo -S -p <sudo_prompt> /bin/bash -l -c "<command>"
Run Code Online (Sandbox Code Playgroud)
显然,我的用户无权在/bin/bash
没有密码的情况下执行.
我通过使用run("sudo blah")
代替而解决了这个问题sudo("blah")
,但我想知道是否有更好的解决方案.这个问题有解决方法吗?
我有一个django应用程序,我写了一个结构脚本,在部署服务器(Cent OS 5)上安装我的应用程序.
现在我想在部署服务器上本地运行相同的结构脚本.
有没有办法在不提供ssh用户和密码的情况下执行此操作?
我的意思是只用"-H localhost"?
谢谢,Alex A.
我想将一些值从结构传递到远程环境,我没有看到一个很好的方法来做到这一点.到目前为止我提出的最好的是:
with prefix('export FOO=BAR'):
run('env | grep BAR')
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但似乎有点像黑客.
我查看了GIT存储库,看起来这是问题#263.
用于部署典型Django项目的最佳库存Fabric脚本是什么?Fabric看起来非常好,但似乎要求您从头开始编写自己的部署脚本.来自卡皮斯特拉诺,我想从一些开箱即用的东西开始,其他人已经测试过,而不是从头开始编写.
理想情况下,我想要一个同步数据库,使用South执行迁移,备份站点和数据库,并可以回滚以前的部署.
我在一台新PC上设置了我的开发环境,看起来我和Fabric有一些奇怪的错误.它的'cd'上下文管理器似乎不会改变当前目录,因此我的很多命令都不起作用.我写了测试,它向我展示了我没想到的结果:
from __future__ import with_statement
from fabric.api import local, run, cd
def xxx():
with cd("src"):
local("pwd")
Run Code Online (Sandbox Code Playgroud)
以下是运行后的结果fab xxx
:
[localhost] local: pwd
/home/pioneer/workspace/myproject
Run Code Online (Sandbox Code Playgroud)
但我想,/home/pioneer/workspace/myproject
不应该有/home/pioneer/workspace/myproject/src
.
我整理了一个移动开发堆栈,几乎完全在node.js上使用Javascript.除了SASS(更喜欢LESS)和Fabric之外.我不想污染我的开发目录,因为我必须组合和缩小JS和CSS,我想我也可以使用node.js来提供我的代码.
我想减少对Ruby和/或Python的依赖.我并没有真正使用Fabric的所有功能,所以我希望能够取代它.但我找不到任何用Javascript编写的类似工具.
我只需要:
Fabric可能已经过度杀伤,我只将它用于我的Python Web项目,因为必要的服务器不能在我的机器上运行,但这不是这里的情况.如果没有Fabric,最好的办法是什么?
我正在尝试执行以下操作:
output = run("ls -l backups")
for line in output.split("/n"):
do_stuff(line)
Run Code Online (Sandbox Code Playgroud)
具有任何方式stdout
的ls
发送到output
?
更具体地说,我正在使用一个名为CLI的应用程序s3cmd
,该应用程序ls
与远程Amazon S3存储桶类似.
因此,替代品ls
将无济于事.
我有一个如下的fabfile:
@hosts('host1')
def host1_deploy():
"""Some logic that is specific to deploying to host1"""
@hosts('host2')
def host2_deploy():
"""Some logic that is specific to deploying to host2"""
def deploy():
""""Deploy to both hosts, each using its own logic"""
host1_deploy()
host2_deploy()
Run Code Online (Sandbox Code Playgroud)
我想要做
fab deploy
Run Code Online (Sandbox Code Playgroud)
并且它等同于
fab host1_deploy host2_deploy
Run Code Online (Sandbox Code Playgroud)
换句话说,运行每个子任务,并为每个子任务使用它指定的主机列表.但是,这不起作用.相反,deploy()任务需要它自己的主机列表,它将传播到它的所有子任务.
有没有办法在这里更新deploy()任务,这样它可以做我想要的,同时单独留下子任务,以便它们可以单独运行?
fabric ×10
python ×6
deployment ×3
django ×2
javascript ×1
node.js ×1
python-3.x ×1
ssh ×1
sudo ×1