Python Web开发:测试驱动方法——从TDD基础到使用Fabric进行自动部署【Windows用户细节调整+bug解决】
记录下TDD的各章执行bug以及在Windows环境下需要调整的细节。目录第9章:Staging网站的部署测试1. 【细节调整】通过更改测试临时服务器运行的地址的参数以便使功能测试可以针对staging网站运行2. 【细节调整】在本地创建requirements.txt文件然后通过GitHub传到服务器第11章:使用Fabric进行自动部署1. 【bug解决】运行deploy_tools/fabf
记录下TDD的各章执行bug以及在Windows环境下需要调整的细节。
第9章:Staging网站的部署测试
1. 【细节调整】通过更改测试临时服务器运行的地址的参数以便使功能测试可以针对staging网站运行
调整内容:修改功能测functional_tests\tests.py时,教程内容如下
由于教程是在Linux系统上操作,Linux系统可以照以上方式修改,然后执行
STAGING_SERVER=个人ip python manage.py test functional_tests
正确运行后,应该会出现如下3个报错,此处为正常现象
报错原因:
对于Windows用户,如果按上述方法修改文件并进行功能测试,会发现功能测照常通过,没有应该出现的报错内容。
修改方式:
方法1:代码修改为
def setUp(self): # (3)
self.browser = webdriver.Firefox()
#staging_server = os.environ.get('个人ip')
#if staging_server:
self.live_server_url = 'http://个人ip'
并在cmd直接执行功能测:
python manage.py test functional_tests
方法2:按Linux方式修改.py文件,然后使用git bash打开superlists,执行功能测:
STAGING_SERVER=个人ip python manage.py test functional_tests
2. 【细节调整】在本地创建requirements.txt文件然后通过GitHub传到服务器
**报错命令:**在服务器执行
../virtualenv/bin/pip install -r requirements.txt
报错内容:
pip._vendor.pyparsing.ParseException: Expected W:(abcd…)(at char 0),(line:1,col:1)
pip._vendor.packaging.requirements.InvalidRequirement: Invalid requirement, parse error at " ’ "django=’ "
**报错原因:**在Windows系统中,cmd执行命令
echo "django==2.1.7" > requirements.txt
(对文件requirements.txt写入django2.1.7,如果没有则先创建)时,若该命令在Linux中执行,只写入django2.1.7,而在Windows的cmd中执行,则写入"django2.1.7"(连同双引号一起写入)
解决方案:
方法1:在本地手动创建.txt文件后,手动写入django2.1.7,再push到GitHub上
方法2:使用echo命令后,打开.txt文件,手动删除双引号,再push到GitHub上
第10章:实现real网站的就绪部署
1. 【bug解决】让Nginx服务静态文件,重新加载Nginx并重启Gnicorn后,运行功能测后,网页异常
报错位置:
sudo systemctl reload nginx
../virtualenv/bin/gunicorn superlists.wsgi:application
异常内容:
Invalid HTTP_HOST header: '(个人ip)'. You may need to add 'xxx.xx' to ALLOWED_HOSTS
解决方案:
修改setting.py文件
将
ALLOWED_HOSTS = []
改为
ALLOWED_HOSTS = ['*']
参考:其他博主内容
第11章:使用Fabric进行自动部署
1. 【bug解决】运行deploy_tools/fabfile.py时
报错代码:
def deploy():
site_folder = f'/home/{env.user}/sites/{env.host}'
#其他省略
def _cretae_directory_structure_if_necessary(site_folder):
#其他省略
run(f'mkdir -p {site_folder}/{subfolder}'}
报错内容:
deploy_tools/fabfile.py文件中所有f’……'的内容均在最后一个单引号处报错为“SyntaxError: invalid syntax”
解决方案:
全部改成如下形式
def deploy():
site_folder = '/home/%s/sites/%s' % (env.user,env.host)
#其他省略
def _cretae_directory_structure_if_necessary(site_folder):
#其他省略
run('mkdir -p %s/%s' % (site_folder,subfolder))
注意:
deploy_tools/fabfile.py报错不止以上两处,需全改
参考:其他博主内容
2. 【bug解决】对使用sed命令生成的nginx虚拟host建立快捷方式
报错代码:
sudo ln -s ../sites-available/(个人ip) /etc/nginx/sites-enabled/(个人ip)
报错内容:
ln: failed to create symbolic link ‘/etc/nginx/sites-enabled/(个人ip)’: File exists
解决方案:
报错内容显示文件已存在,而手动删除之后仍旧报错。故用-sf命令强行覆盖先前的文件。
sudo ln -sf ../sites-available/(个人ip) /etc/nginx/sites-enabled/(个人ip)
资料
官方教程:
官方GitHub:
更多推荐
所有评论(0)