晚上十点在改生图。上周还能出图,这周点一下就是红的。
先怀疑自己。翻了半天代码,这几天一行都没动过。去中转站的后台看,那个号的房间被停了,不是过期,是直接 paused,报错写着 403 access_denied。门是人家关的,不是我写错。
换了个新 key 再试,还是 502。这次是真懵了。
看日志,后端抛的是 Image provider is unreachable。可 key 是好的。我在服务器上手打一条请求,八十五秒之后图片出来了。八十五秒,而站点给生图的超时是四十五秒——那个常量本来是给对话写的,图和对话压在同一个值上。等于说只要出图超过四十五秒,前端永远等不到结果。以前它没坏,只是运气好。
改完超时再试,通了。顺手往下查,nginx 那层等我一百二十秒。意思是后端肯等四分钟也没用,用户那头两分钟就被网关掐了。一起改。
到这里我以为完事了。点开生成的图才发现另一个问题:图片根本不在我这儿。
链接长这样:download 点一串字母,后面跟着 images/local-algorithm 和四十位哈希。两个毛病。一是会过期,中转站那边是临时文件,存着也不保证能放多久。二是国内访问慢,我在自己电脑上拉一张 1.5MB 的 PNG,等了一分半直接超时;换成服务器去拉,一点九秒。同一张图。
所以加了一步:出图以后立刻把图下载回来,存到自己机器上,按内容哈希命名,前端拿到的是 /ai-img/xxx.png,nginx 直接发,缓存三十天。原始链接也留着,写在 source_url 里,以后想核对还有地方看。
代价是每张图多花一两秒下载,磁盘多占一点五兆。好处是从此这张图是我的。中转站明天关门,我的站上它还在。
以前我懒,觉得贴个外链就行。直到上个月给照片墙核出处,一百多张一张一张对,才知道贴外链有多不牢。别人的服务器说关就关,你的文章第二天就变成一排裂图,配图的位置留着个灰色方块。
现在这个站里,凡是自己生成、自己收藏的图,都落一份在本地。不是为了占地方,是想让它能撑过下一个冬天。
