微信公众平台部署手札 (II)

前文再续,书接上一回。。

上回讲到已经用 django 将消息回复接口调试好了,但是用我的微信号向公众号发送消息,却没有在服务器接收到请求,怎么回事呢?

原来是国外 IP 一律屏蔽,估计是微信的“潜规则”,文档里貌似没有看到。

于是只好按照书中所说,转战 BAE 了,记得去年下半年 BAE3 还是公测阶段做不了什么东西的,一直就没搞,至于 SAE,之前也没有认真搞过,估计架构师类似的,这次搞的时候也验证了这个说法。

下面先讲一下 BAE 的各种政策: a. 先使用后付款,月尾结账,也就是说不付钱起码可以免费搞一个月(但是是要身份证的哦); b. 最低的套餐两毛钱一天(超便宜了,其实速度很赞的); c. 不过还是需要备案,不备案绑定不了域名,但是可以用分配的 duapp.com 的二级域名,这样可以让微信接受。

下面开始讲部署过程:

1. 前提条件

搞到现在,确认一下我们手中的材料:

a. 已经调试通过的 django 1.6 项目一个; b. BAE 已经注册验证完毕; c. 公众号验证 standby;

2. 在 BAE 创建一个 python 部署

前往 bae 并登录;

登录后顶部菜单栏右侧最左《管理控制台》下拉,有三个选项(轻应用管理/移动应用管理/开发者服务管理),我们选的是第三个《开发者服务管理》,创建一个工程,点进去;

然后点击左侧边栏的应用引擎,添加一个部署,资源最小化就好了,类型选 “python-web”,其他自行决定,创建!

然后部署列表就出现了一条记录,说明创建成功。我们这里创建一个名称为 mysite 的部署。

这个时候 svn/git 里面已经有初始的代码部署好了,访问域名就应该可以看到欢迎页面了。

3. 获取代码

我选的是 svn 用的是 win7,就来个傻瓜的,装个 TurtoiseSVN

然后在系统资源管理器找块地儿,我是创建了个 d:/bae 的目录,在空白处右键,找到并点击 SVN checkout,然后第一条 url 就填 bae 部署列表中那个记录的 “svn/git 地址” 里面找到,改一下目标目录,OK;

然后如果要输账号密码,使用你的百度账号与密码

过后应该就产生了一个文件夹里面有一个 python 项目文件。

5. 创建 Mysql 数据库

在 bae 部署列表页面里面点击扩展服务,添加一个 MySQL 服务,免费 1G 空间可以够用的;具体就不讲了,搞好之后有一个数据库级别的 phpmyadmin 可以操作,进去可以看到所有连接信息;

6. 配置 django 环境

当然,bae 很强大可以支持不同的 python 框架而不仅仅是 django 的。

换句话说我们要细致地配置 django 的环境,文档有,但是最后由于我用的是 1.6(python 的版本基因你懂的),加上各种菜鸟不了解 wsgi 运作方式,还是折腾了不少弯路才搞定;

现在项目里面应该是有三个主要的文件:

  • app.conf
  • index.py
  • requirements.txt (自行创建)
6.1. requirements.txt

中间有不少弯路我就不解释了,先讲 requirements.txt,这里实际上就是指定我们这个项目要用的 PyPI 包,也就是说 pip install 什么,这里就应该写什么,我们的这个项目,最终要装这几个:

django==1.6.2 MySQL-python xmltodict

填上保存,其他暂时不需要;

6.2. app.conf

这个应该主要是 web 服务的配置,没有修改。

6.3. index.py

这个最最关键,其实这个直接相当于项目中的 wsgi.py,那个其实不用了,做之前可以对照一下官方文档里面的 index.py 和 django 自己生成的 wsgi.py 的异同;

按照我这里的配置,这个启动文件最后的样子是这样:

import os import sys

1. 添加路径

path = os.path.dirname(os.path.abspath(file))+'/mysite'

if path not in sys.path: sys.path.insert(1, path)

2. 指定 settings 路径

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

3. 开启 wsgi 应用

from django.core.wsgi import get_wsgi_application from bae.core.wsgi import WSGIApplication

application = WSGIApplication(get_wsgi_application())

第一段,要将当前目录加入到 python 路径中,这样 import myapp 之类的引用才能找得到位置;

第二段,指定一个 settings 文件,注意第一段如果没配置好将导致 settings.py 找不到;

第三段,启动 wsgi,注意这里跟标配的 wsgi.py 内容不同,需要用到 bae.core.wsgi 这个类库来生成一个 wsgi application;

其实我对背后的机制很不熟悉,但是官方文档的步骤基本上是这几个,开始的时候主要是把路径搞乱了,才走了很多弯路。

改完了先右键项目,commit 一下;

6.4. 添加项目文件

这里我们最重要的一步还没有做,就是要把 django 的项目文件加进去。

那么我们进入我们当前 svn checkout 出来的目录 myapp 在里面执行: d:\bae\mysite>python django-admin.py startproject mysite d:\bae\mysite>cd mysite d:\bae\mysite\mysite>python django-admin.py startapp myapp

然后 svn 把整个项目 commit 一下。

回到 bae 的部署列表,可以看到我们的 mysite 项目那里出现了“有新版”的标签,说明 svn 的源代码更新了,点一下“快捷发布”,就可以把代码部署到环境中。

部署结束之后,状态变回“正常”,就可以从“域名 -> 点击查看”看到 django 的 It works! 页面了。

6.5. 配置数据库连接

这个的话看文档就好了,旧版的 bae 设定了一个常量库引用数据库,但是新版放开了数据库的接口,所以本质上是可以在 app 之间交叉调用数据库的,我这里的配置如下。

上面的 user 和 password 就是应用的 api key 和 secret key,在 bae 的应用页面右上方可以找到;

注意这里用的 mysql 引擎,是依赖于 MySQL-python 这个库的,如果在上面的 requirements.txt 没有添加引用,就会报错。

再度 commit,快捷发布,没有报错即为 OK。

6.6. 拷贝微信应用代码

环境部署基本上大功告成,现在要把我们之前做好的 mysite 项目文件夹拷贝到 svn 项目里面,然后 commit 再用微信调试接口就可以测试得到了。

然后依然如法炮制,在微信里面进行认证。

搞到这里,这次我在微信向公众号发消息,就真的可以接收到请求了,而且消息回复也 OK。

7. bae 的日志调试

可以看到,在部署列表上方的菜单按钮有一个《查看日志》,我们可以在程序里面将一些消息输出到 /home/bae/log/***.log 文件中,文件名可以自己随便定,然后里面的内容就可以通过这里查看了。

我当时就是通过这个来确认接收到的请求内容的。


至此打住,微信公众平台以及 BAE 的初体验到此结束,继续回去搞项目。


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2014/04/wx-2.html【微信公众平台部署手札 (II)】

《微信公众平台部署手札 (II)》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注