为了节省费用,我尝试将白菜移植到一台必须有Linux环境的机子上运行(为了和节点共存)。
一开始打算使用WSL,无奈这东西在桌面Win10已经普及了,但是Server系统下只有一个Insider Preview。
Preview到什么程度呢,那个系统没有Explorer,甚至没办法移植(comctl32.dll还是哪个系统文件是定制的,没法覆盖也没法兼容,毕竟VPS可没有PE和安全模式)。
在一番挣扎之后我们彻底放弃了它,改为Ubuntu,于是我的灾难来了……
在此之前我也曾经在CentOS等系统下配过Java+MySQL的环境,但是酷Q是用易语言写的,于是就涉及到一个Docker的使用问题。
在坑了一天之后(其实是我耐不下心去啃文档,只能自己瞎几把试),大概了解了这点:
docker pull是下载一个镜像,类似于创建一个类
docker run是创造一个容器,类似于实例化对象
而docker start和stop是操作这个容器,docker rm是删除容器(对象),docker rmi是删除镜像(类)。
大概遇到的坑有:
在docker内运行的酷Q,虽然能提供5700的HTTP Server,但是同一台机子上运行的Tomcat开放的8080端口它却无法作为客户端使用,
指定localhost:8080和127.0.0.1:8080都无效,必须把酷Q的消息上报地址改为服务器的公网IP(我实际上是改为了域名)
我的代码里需要处理ppy给的类似于 1970-01-01 00:00:00的日期格式,
在Win下面,Gson默认转换没有问题,但是Ubuntu下就不行(似乎和时区无关,我本地的WSL也是这样),必须硬编码一个日期格式才能起作用。
这次重构,把CQService里具体的处理拆出来一个CmdUtil,实体类、util全部分包处理,
为了避免Win/Ubuntu的路径不一致将所有素材以二进制形式存到了数据库……四个语音base64编码之后直接硬编码到程序里(
同时还发现,我之前给ImgUtil加了一个static的Map,然后写了个静态方法去用NIO爬目录,把图片塞到那个Image里,最后在构造器里调用这个方法……
但是我ImgUtil是用prototype模式注入,每次有HTTP连接都会实例化一个新的ImgUtil,重新爬一次,压根没起到缓存的作用_(:з」∠)_
还把oppai换成了Java实现,那作者自称不喜欢Java,也别问他要更多Java程序或者支持,虽然oppai的功能全部搬了过去。
用了一下,我发现他用了一大堆静态内部类,而且要使用它 必须把它和调用它的类放在同一个包里(有个关键东西的构造函数是包访问权限的)。
本来想自己改造,但是想到万一PP算法一改,作者一更新那我不就歇逼了?于是老老实实按他规定的方法来_(:з」∠)_
一开始没掌握正确的使用方法,于是昨晚上漏掉了HR和DT(我把MOD应用之前的star穿进去了,柑橘妖怪作者不提供详细的example)。
再一次体会到了“你以为你写的代码是这样跑的,其实根本不是”的心情。
接下来就是写网站部分,然后还有一个准备咕很久的东西……还有白菜的邀请入群机制也要改改,自动清理文件的机制也要改,不过这两天我有点心力憔悴,先咕着吧……