摘要:前兩天將一個(gè)部署到服務(wù)器時(shí),用就是啟動(dòng)不了,錯(cuò)誤信息為無(wú)權(quán)限創(chuàng)建目錄。查看工作目錄權(quán)限,當(dāng)前用戶是有權(quán)限的,看了源碼,原來(lái)是用的包的問(wèn)題。首先,在生產(chǎn)環(huán)境下的啟動(dòng)是通過(guò)啟動(dòng)的。
前兩天將一個(gè)egg部署到服務(wù)器時(shí),用npm start就是啟動(dòng)不了,錯(cuò)誤信息為無(wú)權(quán)限創(chuàng)建log目錄。查看工作目錄權(quán)限,當(dāng)前用戶是有權(quán)限的,看了源碼,原來(lái)是用的npm包的問(wèn)題。這里簡(jiǎn)單記錄下解決過(guò)程。
首先,在生產(chǎn)環(huán)境下的啟動(dòng)是通過(guò)egg-script 啟動(dòng)的。在啟動(dòng)時(shí),終端會(huì)有如下輸出:
Save log file to /XXX/XXX
我們查看egg-script的源碼,在他的start命令中,找到Save log file,如下
下一步,找到這個(gè)logDir變量聲明的地方,往前看就能找到,如下代碼:
const HOME = homedir(); const logDir = path.join(HOME, "logs");
那么這個(gè)homeDir()是什么呢?它是npm包node-homedir,它的方法體如下:
const os = require("os"); module.exports = () => { if (process.env.MOCK_HOME_DIR) return process.env.MOCK_HOME_DIR; if (os.userInfo && os.userInfo().homedir) { return os.userInfo().homedir; } else if (os.homedir) { return os.homedir(); } return process.env.HOME; };
這就很清楚了,我的服務(wù)器是centos,登錄賬戶的userInfo最終返回的homedir就是系統(tǒng)根目錄,"/",而不是我的項(xiàng)目工作目錄,由于運(yùn)維設(shè)置,我沒(méi)有權(quán)限在系統(tǒng)/logs下寫權(quán)限,所以出現(xiàn)了一開始提到的錯(cuò)誤。
找到原因后就很好辦了,按上面的源碼,在啟動(dòng)腳本里,先創(chuàng)建個(gè)MOCK_HOME_DIR的環(huán)境變量,并指定到項(xiàng)目目錄即可。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/93334.html
摘要:項(xiàng)目都很小,但為了進(jìn)一步了解,特意選擇了作為框架基礎(chǔ)開發(fā)后端服務(wù)。能將請(qǐng)求限制在同源網(wǎng)站,即只有擁有專有令牌的網(wǎng)站發(fā)送請(qǐng)求才會(huì)正確響應(yīng)。項(xiàng)目生產(chǎn)靜默部署,啟動(dòng)使用,停止使用。不足工具函數(shù)的訪問(wèn)需要自己手動(dòng)添加擴(kuò)展另沒(méi)有寫測(cè)試,希望下次補(bǔ)上。 前言 這段時(shí)間,用Eggjs作為后端服務(wù)框架開發(fā)了幾個(gè)項(xiàng)目。項(xiàng)目都很小,但為了進(jìn)一步了解Eggjs,特意選擇了Eggjs作為框架基礎(chǔ)開發(fā)后端服務(wù)。...
摘要:好吧且不說(shuō)抽象統(tǒng)一處理的事,解決問(wèn)題才是目的。確實(shí)把整個(gè)錯(cuò)誤處理可以完整的抽象出來(lái)。當(dāng)然可以在中注入更多統(tǒng)一處理函數(shù),也可以通過(guò)函數(shù)名做一些判斷,比如對(duì)所有名字中包含的函數(shù)進(jìn)行單獨(dú)的日志處理。 起因 在之前的項(xiàng)目中我發(fā)現(xiàn)每個(gè)控制器大約都是這樣寫的 async function findId (id) { let res; try{ res = await...
摘要:今天就簡(jiǎn)要說(shuō)說(shuō)下的實(shí)現(xiàn)。主要的原因是的文檔寫的不太清楚,方便新人快速上手。導(dǎo)致我們一目十行去掃文檔的時(shí)候,有時(shí)總會(huì)覺(jué)得有些莫名,的實(shí)現(xiàn)就是其中之一。其實(shí)這和我本身對(duì)的了解不深入有關(guān),但是也沒(méi)有文檔和我說(shuō)實(shí)現(xiàn)啊。 這兩天真的是宅的骨頭都發(fā)霉了,春困秋乏夏打盹,也是醉了。今天就簡(jiǎn)要說(shuō)說(shuō)eggjs下Restful API的實(shí)現(xiàn)。主要的原因是egg的文檔寫的不太清楚,方便新人快速上手。話說(shuō)eg...
摘要:由于中的都是服務(wù),所以需要一個(gè)插件來(lái)調(diào)用服務(wù)??梢钥吹?,只是一個(gè)封裝,真正對(duì)工作委托給了也就是。在里,我們進(jìn)行了方法的綁定,這樣在里,就可以像調(diào)用方法一樣,調(diào)用服務(wù)了。完成后,補(bǔ)齊單元測(cè)試,發(fā)布到庫(kù)里就可。 由于MVC中的M都是dubbo服務(wù),所以需要一個(gè)插件來(lái)調(diào)用dubbo服務(wù)。個(gè)人推薦這個(gè)包node-zookeeper-dubbo 我們所需要的只是把他封裝成一個(gè)插件,使用方式則類似...
摘要:到這里,基于的前后端分離實(shí)現(xiàn)方案就搞定啦四關(guān)于的一些思考實(shí)際上,在使用的過(guò)程中有一個(gè)比較致命的缺點(diǎn),就是一旦簽發(fā)了,在到期之前就會(huì)始終有效,除非服務(wù)器部署額外的邏輯。結(jié)語(yǔ)以上是關(guān)于基于的前后端分離實(shí)現(xiàn)方案的總結(jié)和思考。 一、jwt是什么 JWT全稱, JSON Web Token,是一個(gè)以JSON為基準(zhǔn)的標(biāo)準(zhǔn)規(guī)范。 舉例:服務(wù)器認(rèn)證以后,生成一個(gè) JSON 對(duì)象,發(fā)回給用戶,就像下...
閱讀 2551·2021-09-22 16:05
閱讀 3125·2021-09-10 11:24
閱讀 3728·2019-08-30 12:47
閱讀 3023·2019-08-29 15:42
閱讀 3453·2019-08-29 15:32
閱讀 2036·2019-08-26 11:48
閱讀 1145·2019-08-23 14:40
閱讀 961·2019-08-23 14:33