使用mod_wsgi(二)

这段时间,我用Flask完成了一个数据服务类的网站建设(基本没有使用上篇文章所提到的Git,仅仅同步到了我的Github),好多新的技能需要总结(必须要总结)。今天,遇到了对我来说难以解决的问题,临时记录于此:

1、我将app的测试环境改为生产环境,为此查了大量的Apache配置资料,但是这一块,我需要从0到1的学习。目前极其缺乏基础。

2、Python的虚拟环境,还是上次和Anaconda有关,如果不是因为Anaconda,我用纯净的Python也不会有此烦恼:

a) 我的python是跟随Anaconda自动下载的。我没有使用conda命令创建新的虚拟环境,因为我觉得它的原理和纯净的python -m venv xxx命令相同,既然如此,我何必用conda呢,所以我用了后者。

b) 今天我发现我的虚拟环境中没有bin目录,没有activate_this.py之类的文件(这个和anaconda有关系吗?)。据我在网上搜寻,这是apache启用python的虚拟环境所需要的。我是苦苦搜寻,但愁没有这方面的基础知识。长期以来,python学习文档在于它的语言本身,而非它的运行环境。或许这和操作系统有关,和操作系统与机器的交互有关。我缺少这方面的教育。

以后要重点看的,是Apache以及Python在运行环境方面的原理和规则(这句话本身都是我临时想到的,甚至不知道方向是否正确,这是自学的困难所在,缺少从0到1这一阶段的知识点)。

现在我的网站能跑起来了,但是绝对是权宜之计:

我在wsgi文件开头写上了硬硬的代码:

import sys, os
if 'F:\\JemmellDataCenter\\env\\Lib\\site-packages' not in sys.path:
  sys.path.insert(0, 'F:\\JemmellDataCenter\\env\\Lib\\site-packages')
if 'F:\\JemmellDataCenter' not in sys.path:
  sys.path.insert(0, 'F:\\JemmellDataCenter')

(可能)标准的硬代码是这样:

import sys, os

sys.path.insert(0, os.path.dirname(__file__))

(但是,应该要加上if测试吧?)无论如何,这是没有解决虚拟环境的引入问题导致的。应该在Apache的配置文件中解决Python虚拟环境问题。

c) Apache的配置文件<VirtualHost>是什么玩意,经过一番了解,我判断这个绝对和Python虚拟环境无关。或许需要为之建立一块<VirtualHost>规则,但这是两码事。

学习Apache的起点是什么,套接字,send之类的是不是太靠基础了,和上述问题没有关系吧。我关心的是Apache何以运行,所以可能就是“运行环境”相关。

Python在这方面是什么?是包管理吗?

那么这是运维相关的工作吗,我涉及的面是不是太多太杂了,这对我的技能发展是否有好处?我想,如果我能掌握这些,比学习纯粹的开发是有好处的,我更加知道整体发生了什么事情。

 

--------------------------------------------------------------------------------------------------

2022-02-10:

因为要向同事开放一项服务(为服务号粉丝,其实是经销商,生成认证码),所以不得不使用公司电脑,这个电脑是Windows的,装了一天的uwsgi也没有成功,改用mod_wsgi,以上的问题有些答案如下:

if 'F:\\JemmellDataCenter\\env\\Lib\\site-packages' not in sys.path:
  sys.path.insert(0, 'F:\\JemmellDataCenter\\env\\Lib\\site-packages')

是不需要的,因为在Apache的conf中肯定要配置的。之前因为用anaconda,配置成这样 WSGIPythonHome "d:/anaconda3", 导致我一直没弄明白

if 'F:\\JemmellDataCenter' not in sys.path:
  sys.path.insert(0, 'F:\\JemmellDataCenter')

这句如果配置了系统环境变量,PythonPath之类的,就不需要了。但是我更不愿意去动系统环境变量。

 

此外,WSGIScriptAlias / F:/wechat/wechat.wsgi这句比较有意思,前面的/ 并不是url,本来我写成/wechat/dealers,在Flask中@app.route('/wechat/dealers'), 居然不行。

改成如下,才可以。

WSGIScriptAlias / F:/wechat/wechat.wsgi

在Flask中@app.route('/wechat/dealers')

具体没捋顺,这和nginx比,不太直观。

 

posted @ 2021-09-28 16:00  sheffiled  阅读(140)  评论(0)    收藏  举报