基于play Framework 2.2的微信公众号开发

最近在学习服务器开发(主要是基于linux),选择了play framework这个框架,用微信公众号来练手。

首先安装JDK1.8,具体方法自行百度。

然后从www.playframework.com 下载zip包(最新版2.5.x没找到link,只找到了2.2.6的zip),解压

进入play目录,chmod 755 play

在.bashrc中添加PATH=/ubuntu/home/play:$PATH

注意在Windows系统,不要放在"Program Files"之类有空格或其他字符的目录,会产生如下错误:http://stackoverflow.com/questions/22135636/install-play-framework-windows-8-1

执行play出现PLAY图案说明安装成功


执行play new hellowworld创建hellowworld app

进入hellowworld 目录,执行play出现$命令行(注意这里可能会loading等很久,下载各种依赖包


默认的端口是9000,在play命令后加端口号来修改端口,例如:play -Dhttp.port=9001

输入run运行出现下图说明运行成功


在浏览器输入http://localhost:9000/ 出现play页面



接下来配置nginx,配置文件放在  /etc/nginx/sites-enabled/:

server {
    listen 80;  #微信必须用80端口
    root /path/applicationName;  #例如 /home/ubuntu/stephen/playproject/helloworld;
    server_name xxx.xxx.xxx.xxx;  #服务器公网ip
    location / {
        proxy_pass http://127.0.0.1:9000;  #可指定其他端口号,和play中匹配即可
        proxy_pass https://127.0.0.1:9443;  #可指定其他端口号,和play中匹配即可
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

sudo nginx –s reload

一般都会使用eclipse做开发,需要生成eclipse项目所需文件,在你创建的play app目录下执行:

play eclipse

过程中需要下载依赖包,可能会很慢,我本地windows可能有些包下不下来,还是把整个app目录上传到腾讯云服务器上执行成功后再拉下来才搞定。


关于play controller,参考了:https://www.oschina.net/question/12_9610

打开play app的 conf 目录下的 routes 文件,你可以看到这么一行:

GET / Application.index

该配置表示当请求 / 时,会调用 Application 类的 index 方法

打开 app/controllers/Application.java ,就可以看到源码如下:

package controllers;
import play.*;
importplay.mvc.*;
import views.html.*;
 
public class Application extends Controller {
    public static Result index() {
        return ok(index.render("Yournew application is ready."));
    }
}

微信API使用的是https,总结了以下几点经验:

1.  调用中遇到ssl certification 问题,通过在application.conf中添加以下配置解决

ws.acceptAnyCertificate=true

2.  从log中发现如下错误

[error] play - Error loading fake key store

[error]p.nettyException - Exception caught in Netty

解决方法:

keytool -genkey -alias MyKey -keyalg RSA -keysize 2048-keystore keystore.jks
play -Dhttps.port=9443 -Dhttps.keyStore=keystore.jks -Dhttps.keyStorePassword=password start

参考:http://stackoverflow.com/questions/21667254/play-framework-2-2-1-https-fails-on-connection-attempt


计划中使用讯飞的tts转语音接口,结果碰到20021错误,及10111错误,都是因为so无法成功加载

参考以下帖子:

https://github.com/playframework/playframework/issues/2212
http://stackoverflow.com/questions/31621262/fail-to-load-a-native-library-using-activator-play-framework/31662317

最后通过增加一个PlayNativeLibraryLoader类并在Global的onStart中调用,配合启动命令使用(增加了红字部分):

play -Dhttps.port=9443 -Dhttps.keyStore=keystore.jks-Dhttps.keyStorePassword=password  -Djava.library.path=.  start


注意这两者(新增类和执行命令中的path)缺一不可,开始分开实验都不成功,差点埋在坑里,最后死马当活马医都写上才搞定。


关于部署

首先要意识到一点,Play Framework 开发过程中是无需编译的。

其次,Play Framework 有两种不同的工作模式:开发模式(dev)产品模式(prod)

具体的工作模式可在应用目录下的 conf/application.conf  文件进行配置,例如:

application.mode=dev

两种模式的差别在于,dev模式不会预先编译java文件,只是有请求到才会编译,而且更改源文件后可立即生效;而 prod 模式下,一旦应用启动后就会自动编译所有 java 文件,而且不会重载修改的 java 文件,必须重启才能生效,包括模板文件和配置都是一样的, prod 是一种全优化的模式,所有的程序都会被缓存。

使用play dist打包在target/universal目录下生成zip文件,解压后执行

结果我租的服务器只有1G内存,出现了memory不足的问题,汗。


一些有用的链接:

playFramework API


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值