django fabric设置主机进行部署

时间:2015-10-07 05:54:48

标签: python django fabric

我想在localhost和我的实时版本中部署我的代码以实现这种自动化我使用的结构。我的基本结构文件如下:

 def localhost():
    "Use the local virtual server"
    env.hosts = ['127.0.0.1']
    env.user = 'user'
    env.path = '/var/www/html/{}'.format(env['project_name'])
    env.virtualhost_path = env.path

def webserver():
    "Use the actual webserver"
    env.hosts = ['www.example.com']
    env.user = 'username'
    env.path = '/var/www/html/{}'.format(env['project_name'])
    env.virtualhost_path = env.path

def setup():
require('hosts', provided_by=[localhost])
require('path')

sudo("apt-get update -y")
sudo("apt-get install git -y")
sudo("apt-get install postgresql libpq-dev python-dev python-pip -y")
sudo("apt-get install redis-server -y")
sudo("apt-get install nginx -y")

sudo('aptitude install -y python-setuptools')
sudo('apt-get install python-pip')
sudo('pip install virtualenv virtualenvwrapper')

现在我只想部署到我的本地机器。当我这样做时,它给了我错误的说法

The command 'setup' failed because the following required environment variable was not defined:
hosts

Try running the following command prior to this one, to fix the problem:
localhost

provided_by=([localhost])在这里做了什么。我想它应该在localhost中提供主机和用户等信息。

为什么我收到此错误? 需要帮助

2 个答案:

答案 0 :(得分:0)

我不确定为什么除了文档中没有提到主机列表如何构建之外它不起作用。您设置主机值的选项是:

  1. 在fabfile中全局指定env.hosts = ['127.0.0.1']
  2. 将主持人传递给fab:fab -H 127.0.0.1 setup
  3. 调用localhost任务:fab localhost setup
  4. 在设置功能
  5. 上使用@hosts装饰器

    请参阅http://docs.fabfile.org/en/1.10/usage/execution.html#how-host-lists-are-constructed

答案 1 :(得分:0)

fabric.operations.require(* keys,** kwargs):

  

检查共享环境dict中的给定密钥,否则中止   找到...可选的关键字参数 provided_by 可以是函数或函数名称的列表,也可以是用户应该能够执行以设置一个或多个键的单个函数或函数名称;如果不满足要求,它将包含在错误输出中。

http://docs.fabfile.org/en/1.10/api/core/operations.html?highlight=require#fabric.operations.require

这就是为什么您收到错误消息,说首先运行localhost,然后setup

fab localhost setup