上一篇教大家docker玩转神奇宝贝,小伙伴们还是玩的很开心滴,今天我们搞点技术化的事情,解决一些技术问题。
:
问题&解决
1. 前台页面无反应,但看得出IO服务器还是能用的
我们能看出IO服务器是能用的,但是也最好检查一下letweplay-io项目的日志和监控状态。如果一切良好,基本可以排除IO端的问题。
所以接着我们以此类推,查看letweplay-core项目的日志和监控状态。如果letweplay-core项目的CPU占用率平均小于5%我们基本可以推断出是js模拟器发生了问题。我们需要重启它。 在于灵雀云平台的实战中,我发现每当letweplay-core出现问题时,单单重启core部分也不能解决问题,控制台中显示error: failed to connected to redis,可以简单判断出是core部链接到后端数据库的部分出了问题(原因尚不明确)。所以我们要按照:redis -> letweplay-io -> letweplay-core -> letweplay的顺序依次重启,因为一旦重启redis而不重启其余被redis项目链接的项目,会造成链接到空项目的问题。
注意:本项目的及时存档功能,数据是存储于redis容器中的, 如果redis服务器被重启了以后,那么游戏的进度数据将会荡然无存。 对此,我推荐使用Volume挂载或是灵雀云的有状态容器服务。
2.游戏画面不动,在线人数总是为0
当遇到这种情况,肯定是socket.io服务器就有问题了,对此我们首先要处理socket.io服务器端的故障。 关于问题的判断,可以打开浏览器的控制台,如果有类似如图的问题:
那么就针对环境变量进行修改,改成正确的地址,如图所示:
3. letweplay-core项目总是启动不了,提示『Bad GAME selection, please try another one!』错误
这个问题出现letweplay-core服务在下载ROM文件时发生超时等不能下载的情况。如果你运行的容器对下载服务器的线路不是特别稳定的话就回发生这种情况,在这种情况下。我们可以用DN_SERVER环境变量来定义第三方的下载服务器。
其它小Tips:
- 如果你发现更新了项目的代码,而在镜像构建时没有得到预期的结果时。可能是构建缓存在作怪,这时候一个解决问题的笨方案可以是在Dockerfile中下载代码的宏,诸如RUN git clone git://github.com/imdjh/weplay改成RUN git clone --depth=1 git://....这样的话,docker构建进程就会认为之前的缓存已经失效(未命中)而执行下载代码的工作。
- 这个项目是用灵雀云的平台,它的构建可以在国内或国外,通常来说,如果你的项目镜像在构建时(build)就会下载或更新很多文件(如yum update或npm install),就应该选在国外构建,如果是会在构建时下载只有在国内才快的,就选在国内。值得一提的是:国内国外构建对于同一个项目来说会共用缓存层,这也就给在国内构建多了一个理由。hub.docker.com在容器构建时是永远不会复用上一次构建过的层的,即不打开构建缓存功能:--no-cache=true。