目测这会是一个很深的坑,慢慢填……
参考:段小草:从零开始 Python 微信公众号开发zhuanlan.zhihu.com
第一个目标:
先走通……先不追求细节。
Begin!
【问题1】
过程需要用到web.py,但是web.py貌似不支持python3?
后来,找到了web.pyfor python3……warmwaver/webpygithub.com
不过这个就不能pip install 了,具体做法参考官网安装 (web.py)
新建一个web文件夹存放web.py的所有代码,然后切换到这个目录下,执行python setup.py install
装完执行下面的代码,做个测试:
import web
urls = (
'/', 'index'
)
class index:
def GET(self):
return "Hello, world!"
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
以上是准备工作,接下来正式配置
1、pycharm新建wxInterface文件夹,其中新建3个文件,内容就是copy现成的,只修改token。token的内容自己决定。
2、git bash把3个文件push到sae,可以看到上传成功,但是sae回了个报错:
-----> Unable to select a buildpack
remote: {"Code":1,"Error":"build image failed: exit status 1."}
remote: 错误:构建镜像失败
remote: error: hook declined to update refs/heads/master
To https://git.sinacloud.com/weiweidequan1
! [remote rejected] master -> master (hook declined)
说是路径有错,再检查路径:
原来sae让我们push到master,而不是master 1,这个和参考文章不一样。
去掉1,还是一样的错误
git push sae master:1 是将此次上传的代码命名为版本1
所以失败的原因不在这里!
一下是搜到可以参考的文章:新浪云Git代码仓库使用入门 | 书影博客bookshadow.comPython+sae搭建微信公众平台后台新手教程www.jianshu.com
可以在通过1新建系统变量HOME系统变量,2打开所指向文件夹,3新建_netrc文件,在其保存远程仓库的用户名和密码,
免得每次push都要输一遍
关于答案众说纷纭,有人说hook delined只是表象,本质是代码问题;也有人说remote表示是remote repo的问题应该联系管理员……而且我注意到,搜到的答案不限于python,也不限于sae,而是发生git提交就可能会出现的问题。
一些讨论:git push fails with remote: error: hook declined to update refs/heads/masterunix.stackexchange.com
但发现报错中的hook、refs……&位于.git文件夹中……
.git文件夹内容
git push sae master是否跟:1,输出有差别,但意味着?
感觉需要研究研究hook是干嘛的。。error: hook declined to update refs/heads/external_pub while pushing a branchstackoverflow.com
官方的示例http://www.sinacloud.com/doc/sae/docker/python-getting-started.htmlwww.sinacloud.comsinacloud/python-getting-startedgithub.com
12.29 晚上更
官方手册帮助很大,=总算是成功了!方法就是按照手册说的新增requirement.txt,不然sae不知道是python语言。
还自动安装了python3?
而且我故意只提交了一个1.txt,而不是真正有用的文件,以检验这个失败是不是与代码出错有关。requirements中也只是象征性地写了pillow和tornado,并不是我们真正需要的。但是git push remote还是成功。因此结果显而易见:失败就是是sae不知道哪种语言部署,而不是代码又什么问题(总之就是sae仓库那一侧的问题)
不知道为什么,在网上始终搜不到正确的答案!
下面我们换成真正有用的代码,再提交一次,提交是提交成功了,但是和公众号没接上。
阅读:
这个说明对新手很友好,每个点解释得很清楚,能看懂点赞点赞~~~决定先好好看懂sae架构原理,再往下做。
开发侧:
应用程序
一个可以在新浪云容器平台上运行的应用程序包含以下两个部分:源代码。可以是NodeJS、Ruby、Java等代码。
依赖描述文件。描述了运行应用程序需要的相关依赖包以及如何运行应用程序。
构建程序
构建程序将用户提交的应用程序代码编译为Docker镜像。
镜像
镜像是你的应用程序+依赖包+基础运行环境,在新浪云容器平台上也就是Docker镜像,打包好的镜像可以在容器中运行。
所有部署到新浪云容器平台的应用程序会被打包成镜像分发到容器去运行。
容器
应用程序的运行实例运行在一个一个容器中,容器将一个一个的应用隔离开来。新浪云容器平台使用 Docker 作为容器来运行应用程序。
应用实例
也就是你的应用程序运行的进程,其运行在服务器上的一个一个容器中,接受负载均衡路由过来的HTTP请求并处理。
运行侧:
镜像构建完后会上传到一个镜像仓库中。然后云容器管理平台会根据用户的设置选择一些服务器去运行这些应用程序。服务器收到运行应用程序的指令后,会按照以下步骤来运行应用程序:从镜像仓库下载应用的镜像。
创建一个新的容器,将应用的镜像解压到该容器中。
在容器中执行应用程序指定的命令启动应用实例。
这个应用实例需要监听在0.0.0.0这个interface上,并且监听环境变量PORT指定的端口(默认为5050),处理前端负载均衡转发过来的HTTP请求。
云容器管理平台会监控各个服务器的状态,如果有服务器当机,会立刻将这个机器上所有的应用实例迁移到其它运行正常的机器上。
还有开头参考的那一篇,准备放弃了~过去了一年时间,sae的部署思路已经变化了,不能照搬。