Windows 下 tusd 編譯安裝全流程

原文鏈接:https://github.com/Dream4ever...

項目簡介

tus/tusd,這是項目官網,該項目是一個後端服務,用於接收從前端頁面所上傳的文件。搭配前端 JS 庫 transloadit/uppy,即可實現完整的文件上傳功能。

tusd 這個庫的一大亮點,是可以實現文件的斷點續傳。

項目克隆

需已在 Windows 上安裝 Go

進入 $GOPATH\src 目錄,$GOPATH 通常位於 C:\Users\XXX\go。如果沒有的話,就新建對應目錄,路徑裏的 XXX 是當前用戶名。

執行下面的命令,將項目克隆至當前目錄中。

git clone github.com/tus/tusd

第一個坑:注意上面的克隆地址和 GitHub 官網給出的不一樣,如果用的是官網給出的地址 [email protected]:tus/tusd.git,會報下面的錯誤:

[email protected]: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

安裝依賴

執行下面兩條命令,下載並安裝 tusd 所需的依賴。

go get -u github.com/aws/aws-sdk-go/
go get -u github.com/prometheus/client_golang/prometheus

第二個坑:爲保證依賴能夠正常下載,請參照 解決 go get 太慢的問題 一文中所說的方法,配置 GOPROXY 參數,並在終端開啓代理。

經實際測試,在配置了 GOPROXY 並在終端開啓代理之後,第一個依賴 aws-sdk-go 可正常下載編譯。

第三個坑:即使配置了 GOPROXY 並在終端開啓代理,安裝第二個依賴 prometheus 的時候還是會報錯。這裏並不是說所做的設置出了問題,而是因爲這個依賴需要從 golang.org/x 這個網站上下載包。奇怪的是,在終端所開啓的代理對 GitHub 有效,對這個網站就無效,所以纔有了這個坑。

既然如此,就只能曲線救國了,按照 解決 go get 太慢的問題 一文中所說的另一個方法,去 golang 在 GitHub 上的鏡像項目裏下載對應的包。

比如在安裝第二個依賴 prometheus 的時候,給出了下面的提示,意思就是沒能下載到 sys/windows 這個包。

package golang.org/x/sys/windows: unrecognized import path "golang.org/x/sys/windows" (https fetch: Get https://golang.org/x/sys/windows?go-get=1: dial tcp 216.239.37.1:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.)

那就去 golang 在 GitHub 上面的網站看看,可以找到 sys/windows 這個包,先把它下載過來:

go get -u github.com/golang/sys/windows

上面的命令會把 sys/windows 這個包下載到 $GOPATH\src\github.com\golang\sys 目錄下,而前面安裝依賴 prometheus 的時候,所提到的包的名稱是 golang.org/x/sys/windows,那就需要把剛下載過來的這個包放到提示信息中所說的目錄下面。

爲了省事,直接把 $GOPATH\src\github.com\golang\sys 這個文件夾,複製到 $GOPATH\src\golang.org\x 下面。

這個時候,再執行一遍下面的命令,繼續安裝第二個依賴。

go get -u github.com/prometheus/client_golang/prometheus

這次的安裝之所以能成功,是因爲 go get -u 中的 -u 參數,對於已經下載到本地的包,不會重複下載,這樣前面手動把 sys/windws 這個包下載過來了,所以安裝第二個依賴的時候,就能直接使用已經下載過來的這個包了。

編譯項目

執行下面的命令,開始編譯生成 tusd 對應的可執行文件。

cd $GOPATH\src\tusd
go build -o tusd.exe cmd/tusd/main.go

第四個坑:執行 go build 命令之後,會再次報錯:

cmd\tusd\main.go:4:2: cannot find package "github.com/tus/tusd/cmd/tusd/cli" in any of:
        C:\Users\Administrator\go\src\tusd\vendor\github.com\tus\tusd\cmd\tusd\cli (vendor tree)
        c:\go\src\github.com\tus\tusd\cmd\tusd\cli (from $GOROOT)
        C:\Users\Administrator\go\src\github.com\tus\tusd\cmd\tusd\cli (from $GOPATH)

上網查了查,原來有人已經遇到過這個問題了,說是再手動安裝一下 github.com/tus/tusd/cmd/tusd/cli 這個包就行。好吧,那就執行下面的命令,手動安裝一下這個包:

go get -u github.com/tus/tusd/cmd/tusd/cli

安裝完所需的包之後,再次執行下面的命令,編譯代碼:

go build -o tusd.exe cmd/tusd/main.go

第五個坑:這回終於能夠成功編譯了。不過這裏的命令和官網的還是有點不一樣,go build 命令的 -o 參數後面必須指定文件名。在 Unix/Linux 系統裏,可執行文件是沒有擴展名的。但是在 Windows 上就不一樣了,通常是 .exe,但是 go build 命令的 -o 參數是按照 Unix/Linux 的習慣來的,所以在 Windows 下使用 go build -o abc 這樣的命令來編譯的話,是不會自動加上 .exe 這個擴展名的,需要明確指定擴展名纔可以。

項目運行

執行下面的命令,即可將 tusd 運行在指定的 IP 和端口上:

.\tusd.exe -host 127.0.0.1 -port 1088

參考資料

  • Are there "always on" module repositories and enterprise proxies?:列表中包含國內的幾個 Go 鏡像站。
  • 無法安裝 golang.org/x/tools/的庫:golang.org/x 或者 go.googlesource.com 上面的包無法下載的話,都可以用這個曲線救國的辦法,去 GitHub 上找對應的鏡像項目下過來,然後放到這個包在 golang.org/x 或者 go.googlesource.com 上的對應位置下。
  • Compile from source on MacOS:明明是這個項目裏的包,卻還是報錯,就因爲路徑不對,也是夠坑的。用 git clone 就是把當前項目下載到當前路徑,比如本項目 tusd,就是下載到當前目錄的 tusd 文件夾下。用 go get 則是把當前項目下載到相對路徑下,比如本項目就是下載到 $GOPATH\src\github.com\tus\tusd 這個路徑下。等等,如果我最開始不是克隆項目,而是用 go get 來下載安裝這個項目的話,是不是會省事很多?大坑啊!
  • go build: Compile packages and dependencies:看了官方文檔,才知道 go build-o 參數在 Windows 下,不會自動附加可執行文件的 .exe 擴展名。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章