我想在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中提供主机和用户等信息。
为什么我收到此错误? 需要帮助
答案 0 :(得分:0)
我不确定为什么除了文档中没有提到主机列表如何构建之外它不起作用。您设置主机值的选项是:
env.hosts = ['127.0.0.1']
fab -H 127.0.0.1 setup
fab localhost setup
请参阅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