最近在写一套培训机构用的系统,用来管理学员的,虽然已经上线了,功能足够用了,本着优化用户体验的原则,还在一直不断的加功能,由于某些原因,市场上的相同的系统大多功能臃肿,很多不实用的功能,一直想着做一个系统,是真真正正为培训机构着想的,为培训机构解决问题的。
需求
这个是需求也是最近才发现的,数据备份的问题,培训机构的学员信息全都放在云端,如果这套系统出问题了,数据也会出现灭顶之灾,正是由于之前的系统公司内部管理混乱,最终导致系统负责人换了多次,资金链断裂,导致系统最终停止运行,想下自己的系统,还好,第一,不拿投资人的钱,服务器的成本我还是能出得起的;第二,做好充份备份的工作,而不是出问题才去解决。
至于培训机构的数据解决办法,初次想着每天凌晨生成excel表,将最重要的学员以及刷卡信息以邮件的形式发给培训机构的认证邮箱,用的语言是ruby on rails,开发环境是macos,生产环境ubuntu,thin+nginx。
问题
十年之前给工商局做项目的时候用java操作过excel,当时就两种解决方案,选了一个比较简单的方法,在oracle中写存储过程取数据再用我的模块写入到excel表中形成报表,有这个基础所以并不对这个功能的实现有些忌惮,然而事实上比我想的还简单,上网查了查,ruby对excel的读和写是不同的gem,写的话write_xlsx推荐的比较多,于是乎照着模板,一路配置,测试发送邮件,完全ok,用whenever设置定时发送,然后部署到阿里云的服务器,以为这样应该不会有问题了,毕竟上个系统发过邮件,写完这块已经凌晨了,就没测试,没想到出问题了,邮件没收到。
解决过程
邮件没收到,于是一步一步查,先看下错误日志显示net :: opentimeout,同时在目录下找找,附件生成成功没有,结果附件名字我范了第一个错误。由于这个系统只是发邮件,不涉及附件,这次是生成了附件,附件名字我居然用的是中文,mac系统下完全没问题,中文也支持,ubuntu下没进行任何设置,生成的名字全是乱码,随改成英文和数字,测试,还是收不到。
查资料有说是thin服务器问题的,现在证实我的不是这个问题,想一下,之前的系统只发邮件内容没发附件,该不会是附件出了问题,随把附件取消,问题依旧。今天下午去阿里云后台看了看,突然想到另一个问题,上套系统用的阿里云安全组是经典网络,这次用的专有网络,难道是这个导致的?一查,果然是,专有网络自动屏蔽了25的端口。
只要你用的专有网络安全组,为了安全考虑,25是自动受限的,解决办法有几个:一是提交25端口解封申请,会在一个工作日内审核完毕,方法见下图。
如果你要申请解封,你只能通过25端口来连接第三方的smtp服务器发邮件,如果你直接用本机ip发邮件,人家就给你永久性关了这个端口了。
二是使用ssl加密的465端口发送,系统用这种方式发送成功了,一开始只改了端口号,没想到没用,查了查,用的gem需要加一句:tls=>true,才能成功,先试的qq邮箱,完全没问题,部署到服务器上也没问题。中途怕qq邮箱没法在专有网络上用,就随手申请了个阿里云个人邮箱,配置一下,也是可以用的,不过有两点需要注意的地方。
一是,查阿里云官方文档,smtp 服务地址(华东 1)前面并不是smtp,而是smtpdm,用这个测试了一下,不管用。二是发邮件的时候,qq的邮箱自动把我的邮件放在垃圾邮件里了,导致一开始我以为这个配置也没法用,后来在阿里云邮箱后台中的已发送查到邮件发送成功了,才回来找到的这几封邮件。
这东东耗费了两天时间,说真的一个人开发真是有点累,至此解决问题,部署,上线!用本系统的小伙伴可以享受到每日数据自动备份的服务了!