Heim >Backend-Entwicklung >Golang >Go Buildpack kann das lokale Modul nicht finden. Was vermisse ich?

Go Buildpack kann das lokale Modul nicht finden. Was vermisse ich?

WBOY
WBOYnach vorne
2024-02-13 11:21:07578Durchsuche

Go Buildpack 无法找到本地模块。我缺少什么?

php-Editor Banana ist bei der Verwendung von Go Buildpack auf ein Problem gestoßen: „Das lokale Modul kann nicht gefunden werden, was habe ich übersehen?“. Go Buildpack ist ein Tool zum Erstellen und Ausführen von Go-Anwendungen auf der Cloud Foundry-Plattform. Dieses Problem wird normalerweise durch fehlende Go-Abhängigkeiten oder eine falsche Konfiguration verursacht. Die Lösung für dieses Problem besteht darin, die Abhängigkeiten Ihres Go-Projekts zu überprüfen und sicherzustellen, dass Umgebungsvariablen wie GOPATH und GO111MODULE richtig eingestellt sind.

Frageninhalt

Ich versuche, eine Go-App auf https://fly.io zu erstellen und zu starten, aber beim Erstellen kann ich meine Test- und Vorlagenpakete wie folgt nicht finden:

.
    ├── cmd
    │   ├── doc
    │   │   ├── go.mod
    │   │   └── main.go
    │   ├── git
    │   │   ├── go.mod
    │   │   └── main.go
    │   ├── imp
    │   │   ├── go.mod
    │   │   └── main.go
    │   ├── log
    │   │   ├── go.mod
    │   │   └── main.go
    │   ├── met
    │   │   ├── go.mod
    │   │   └── main.go
    │   ├── orc
    │   │   ├── go.mod
    │   │   └── main.go
    │   ├── pub
    │   │   ├── go.mod
    │   │   └── main.go
    │   ├── rep
    │   │   ├── go.mod
    │   │   └── main.go
    │   └── web
    │       ├── fly.toml
    │       ├── go.gen
    │       ├── go.mod
    │       ├── go.sum
    │       ├── handlers.go
    │       ├── handlers_test.go
    │       ├── main.go
    │       ├── main_test.go
    │       ├── router.go
    │       └── router_test.go
    ├── contributing.md
    ├── go.mod
    ├── go.work
    ├── internal
    ├── license.txt
    ├── main.go
    ├── pctl
    ├── pkg
    │   ├── **templates**
    │   │   ├── base.qtpl
    │   │   ├── base.qtpl.go
    │   │   ├── go.mod
    │   │   ├── go.sum
    │   │   ├── whoami.qtpl
    │   │   └── whoami.qtpl.go
    │   └── **test**
    │       ├── go.mod
    │       └── test.go
    └── readme.md

https://paketo.io/docs/reference/go-reference/#package-management-with-go-modules Status:

the buildpack will vendor dependencies using go modules if the app source code contains a go.mod file. during the build phase, the go-mod-vendor buildpack(opens in a new tab) checks to see if the application requires any external modules and if it does, runs the go mod vendor command for your app. the resulting vendor directory will exist in the app’s root directory and will contain all packages required for the build.

Als ich mir das Build-Protokoll ansah, stellte ich fest, dass go modvendor tatsächlich ausgeführt wurde.

Paketo Buildpack for Go Distribution 2.2.3
Resolving Go version
Candidate version sources (in priority order):
go.mod    -> ">= 1.19"
 -> ""
Selected Go version (using go.mod): 1.19.5
Executing build process
Installing Go 1.19.5
Completed in 35.526s
Generating SBOM for /layers/paketo-buildpacks_go-dist/go
Completed in 0s
Paketo Buildpack for Go Mod Vendor 1.0.7
Checking module graph
Running 'go mod graph'
Completed in 1.166s
Executing build process
Running 'go mod vendor'
Completed in 9.851s
Generating SBOM for /workspace/go.mod
Completed in 21ms
Paketo Buildpack for Go Build 2.0.8
Executing build process
Running 'go build -o /layers/paketo-buildpacks_go-build/targets/bin -buildmode pie -trimpath .'
Failed after 611ms
failed to execute 'go build': exit status 1
handlers.go:5:2: cannot find package "." in:
/workspace/vendor/templates
main.go:8:2: cannot find package "." in:
/workspace/vendor/test
ERROR: failed to build: exit status 1
Error failed to fetch an image or build from source: executing lifecycle: failed with status code: 51

handlers.go:5:2: “模板” main.go:8:2: "测试"

Was ich getan habe:

  1. Ich habe den Modulnamen in eine URL geändert (z. B. test -> some.com/test) und eine Ersetzungsanweisung in go.mod verwendet, um auf das Modul zu verweisen.
  2. Ich habe go modvendor ausgeführt und mir angeschaut, was generiert wurde ... some.com war da!
  3. Ich habe sowohl lokale als auch Remote-Builds per Flugstart ausprobiert. Beides führt zu keiner solchen Datei.

Ich versuche es jetzt mit einem privaten Repository.

Workaround

Dies ist keine großartige Lösung, aber es ist trotzdem möglich, die Hosts-Datei zu bearbeiten, damit das Modul auf den lokalen Dateiserver verweist.

# vim /etc/hosts
127.0.0.1    <module name>

Ich werde diese Antwort bearbeiten, wenn ich herausfinde, ob das Problem bei Fly oder Buildpack liegt. Das Problem besteht darin, dass Fly-Läufe von go modvendor die Ersetzungsanweisungen in go.mod nicht respektieren.

Solange der Modulname im URL-Format vorliegt, kopiert der selbstlaufende Go-Mod-Anbieter alles korrekt . Es muss keine gültige URL sein.

Eine andere Lösung besteht darin, den Code einfach auf einer gültigen URL zu hosten und fertig. Wahrscheinlich fehlt mir eine Flagge, aber ich habe sie noch nicht gefunden. Ich hoffe, dass diese Antwort für jeden, der auf dieses Problem stößt, in der Zwischenzeit hilfreich sein wird.

Das obige ist der detaillierte Inhalt vonGo Buildpack kann das lokale Modul nicht finden. Was vermisse ich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen