第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Linux System.d 單元服務(wù)看不到我的特定環(huán)境變量

Linux System.d 單元服務(wù)看不到我的特定環(huán)境變量

Go
肥皂起泡泡 2022-10-17 10:00:26
我有一個基本的“服務(wù)單元”文件,如下所示。[Unit]Description=Certprovider serviceAfter=network.target[Service]Type=simpleRestart=alwaysRestartSec=5sExecStart=/home/mert/certprovider/certproviderWorkingDirectory=/home/mertUser=rootGroup=root[Install]WantedBy=multi-user.target我在項目的根目錄中有.env文件。CA_DIR_URL=https://acme-v02.api.letsencrypt.org/directoryEMAIL=mertsmsk0@gmail.comHOST=127.0.0.1PORT=8557我用以下幾行加載這個文件。err := godotenv.Load()if err != nil {    log.Fatalln("Error loading .env file")}服務(wù)一直運行良好,但我無法訪問PORT環(huán)境變量。因此我無法啟動網(wǎng)絡(luò)服務(wù)器,因為該端口無法偵聽。我打印.env中不包括PORT的所有環(huán)境變量。我將其名稱更改為APP_PORT但它是一樣的。神秘的部分是我可以訪問.env文件中的其他變量。除此之外,當(dāng)我在單元文件中添加以下行時,我可以訪問該變量,但我不明白為什么我應(yīng)該在單元文件中只添加PORT變量?[Service]Environment=PORT=8557當(dāng)我嘗試將它作為二進制文件運行時,就會發(fā)生這種情況。因為我可以使用以下命令訪問變量。go run .
查看完整描述

1 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經(jīng)驗 獲得超6個贊

如果您在沒有任何參數(shù)的情況下調(diào)用 Load ,它將默認在當(dāng)前路徑中加載 env。

您的當(dāng)前路徑在此處配置:

WorkingDirectory=/home/mert

然而,你說(強調(diào))

我在項目的根目錄中有 .env 文件。

但這不是當(dāng)前的工作目錄。

項目的根

該概念對應(yīng)用程序運行時沒有意義。與 PHP 等解釋性語言不同,Go 編譯為靜態(tài)二進制文件,該二進制文件在功能上與定義它的庫和源集完全不同。在 PHP(或 python、ruby 等)中,這些庫除了某個項目目錄的根目錄之外別無他處。

在 go 中,這些東西只與開發(fā)和測試相關(guān)。您的可執(zhí)行文件似乎位于“項目的根目錄”中,這一事實完全是偶然的,完全沒有意義。

如果您真的想將運行時配置放在特定文件中,在該特定位置,只需將設(shè)置為工作目錄:

ExecStart=/home/mert/certprovider/certprovider
WorkingDirectory=/home/mert/certprovider/certprovider

我會把這些東西放進去,/usr/local這樣我就不會在擺弄我的主目錄中的東西時意外破壞我的 let's encrypt —— 讓我們加密更是如此,因為它可能需要長達 90 天才能意識到你的證書沒有被刷新。出于同樣的原因,我將配置放在我的主目錄之外。

實際上,對于這種情況,我可能會將所有配置放在單元文件中。為什么把它放在那里?但當(dāng)然,這是見仁見智的問題。如果您真的想使用自動.env發(fā)現(xiàn),那么您應(yīng)該指定一個目錄來包含該隱藏文件。將特定于一個應(yīng)用程序的配置放入~/.env.

無論您放在哪里.env,請確保這是您的工作目錄,以便被發(fā)現(xiàn)。

我打印了 .env 中不包括 PORT 的所有環(huán)境變量。我將其名稱更改為 APP_PORT 但它是一樣的。[...] 神秘的部分是我可以訪問 .env 文件中的其他變量。

恕我直言,這聽起來像是您的假設(shè)。如果沒有相反的證據(jù),很容易斷定您已經(jīng)為這些值設(shè)置了默認值,或者它們來自其他來源或行為。這比讓godotenv庫從文件中讀取一些(但不是全部)值更簡潔。

當(dāng)我嘗試將它作為二進制文件運行時,就會發(fā)生這種情況。因為我可以使用以下命令訪問變量。[ go run .]

Go總是作為二進制文件運行。 go run .只需在臨時位置自動構(gòu)建二進制文件,然后運行它。 為什么在生產(chǎn)環(huán)境中運行 Go 應(yīng)用程序時建議使用 `go build` 而不是 `go run`?談?wù)摓槭裁?code>go run在 SO 上經(jīng)常被禁忌。



查看完整回答
反對 回復(fù) 2022-10-17
  • 1 回答
  • 0 關(guān)注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號