跟我學(xué) “Linux” 小程序Web版開(kāi)發(fā)(五):遇到的一些坑
在第一篇文章中,我提到,項(xiàng)目的自動(dòng)部署是放在 now.sh 上,以方便預(yù)覽。但出于用戶體驗(yàn)和速度的考慮,我們選擇了國(guó)內(nèi)的七牛云作為頁(yè)面的承載。不過(guò),七牛畢竟是一個(gè)對(duì)象存儲(chǔ),而不是一個(gè)專(zhuān)業(yè)的靜態(tài)托管業(yè)務(wù),在使用上遇到了一些坑,還好經(jīng)過(guò)努力都得到了解決。
七牛的 Bucket 名規(guī)則
和絕大多數(shù)的云計(jì)算廠商一樣,七牛也使用了 Bucket 來(lái)作為存儲(chǔ)的單元。
由于這個(gè)項(xiàng)目要掛 Linux.cn 的二級(jí)域名,于是我便讓老王創(chuàng)建了一個(gè) Bucket,綁定域名,并通過(guò)七牛自帶的權(quán)限控制機(jī)制,將其分發(fā)給我,讓我來(lái)使用。
在我的個(gè)人控制臺(tái)看到了這個(gè) Bucket:
發(fā)現(xiàn)問(wèn)題
我通過(guò)控制臺(tái),手動(dòng)上傳了生成的文件后,確認(rèn)沒(méi)有問(wèn)題,就將相應(yīng)的功能寫(xiě)入到 Github Action 的 配置文件(配置文件點(diǎn)這里)中,實(shí)現(xiàn)自動(dòng)的部署。但在部署過(guò)程中,屢次報(bào)錯(cuò),不知道為什么。在開(kāi)啟了 DEBUG 信息后發(fā)現(xiàn),竟然是 Bucket 不存在(點(diǎn)我查看 CI 的構(gòu)建信息)。
解決問(wèn)題
和老王溝通以后才發(fā)現(xiàn),是七牛的 Bucket 名機(jī)制的問(wèn)題。
在七牛中進(jìn)行權(quán)限分配的時(shí)候,會(huì)要求你為 Bucket 設(shè)定一個(gè)別名,而且名字和已有的名字必須是不同的,這導(dǎo)致我看到的 Bucket 的名和老王創(chuàng)建的 Bucket 名是不相同的。
而我使用的 AK 和 SK 又是讓老王設(shè)置在 Github 后臺(tái)的 Secrets,Bucket 則是我自己設(shè)置的,所以就出現(xiàn)了問(wèn)題。具體來(lái)說(shuō),是下面這張圖。
由于我填寫(xiě)的 Bucket 是我自己看到的,而不是老王那邊真正的 Bucket 名稱(chēng),導(dǎo)致在上傳的時(shí)候,無(wú)法找到 Bucket。在將 Bucket 名稱(chēng)替換為老王那邊看到的 Bucket 名稱(chēng)后,問(wèn)題得到解決。
七牛不支持 Vue Router 的 History 模式
在第二篇文章中,我提到了引入了 Vue 的 History 模式來(lái)優(yōu)化體驗(yàn)。但是,七牛本身作為一個(gè)存儲(chǔ)系統(tǒng),沒(méi)有轉(zhuǎn)發(fā)的功能,也就導(dǎo)致其沒(méi)有辦法很好的支持 Vue History 模式。
在經(jīng)過(guò)一番研究后,找到了解決方案,就是將 index 頁(yè)面,同時(shí)作為 404 頁(yè)面,這樣就可以實(shí)現(xiàn)從某種意義上的將所有請(qǐng)求都轉(zhuǎn)發(fā)給 Index 頁(yè)面。
你需要做的,就是將 index.html
復(fù)制一份,并重命名為 errno-404
,并和其他文件一同上傳,這樣用戶請(qǐng)求一些不存在的文件時(shí),會(huì)自動(dòng)將請(qǐng)求轉(zhuǎn)發(fā)給 errno-404
, 又因?yàn)檫@個(gè)文件的內(nèi)容是索引文件的內(nèi)容,所以就可以實(shí)現(xiàn)了請(qǐng)求的轉(zhuǎn)發(fā)。
相關(guān)代碼的實(shí)現(xiàn),你可以在 https://github.com/LCTT/tldr.linux.cn/blob/master/.github/workflows/nodejs.yml 這里找到。
總結(jié)
在這篇文章中,介紹了七牛的 Bucket 問(wèn)題,以及 Vue Router History 模式在七牛下的解決方案。