0
votes

Fonctions GCloud Le déploiement ne trouve pas les fichiers de modèle Golang

J'ai écrit du code Golang qui fonctionne lorsqu'il est testé sur ma machine locale. Lorsque je déploiement cela comme une fonction Google Cloud, il échoue car il ne peut pas ouvrir de fichier de modèle. La ligne de code d'échec de code est la suivante: xxx

après cet appel err est défini sur ouvrir list.gelhtml: aucun fichier ou répertoire de ce type < / p>

Le fichier est dans le même répertoire que le fichier go source et n'est pas répertorié dans .gclouignore ou .gitignore . La documentation des fonctions GCloud indique que tous les fichiers de l'annuaire seront téléchargés sauf si la liste dans l'un de ces fichiers ignorés et si j'exécute gcloud méta liste-fichiers-for-upload alors le fichier list.gohtml est inclus dans la liste affichée.

existe une disposition de dossier magique pour effectuer ce travail ou une option sur les fonctions gcloud déployer Commande?


0 commentaires

3 Réponses :


2
votes

J'ai créé une fonction qui énumère les fichiers téléchargés: xxx

it Sortie: xxx

réécriture de la fonction de modèle: < / p> xxx

fonctionne!

Cependant, ceci est sans papiers et un hack: - (

L'alternative consiste à intégrer les modèles comme chaînes Dans les fichiers Golang.

Je recommande de soumettre une demande de fonctionnalité sur le suivi de la question de Google pour Fonctions cloud


2 commentaires

Merci - Vérification de l'arborescence du fichier allait être ma prochaine étape. J'ai pris vos informations et j'ai créé ma propre solution. Incorporation Le modèle du programme rendrait le développement une douleur de manière à ce que ce n'était pas une bonne solution, mais je pourrais consulter le chargement des antécédents et la mise en cache des modèles pour accélérer la réponse de la fonction.


En fait, il s'avère ce répertoire est documenté



2
votes

Basé sur la réponse de @ Dazwilkin, j'appelle désormais la fonction ci-dessous au début de la fonction de portion.

plutôt que sur le chemin du chemin dans les noms de fichier de modèle (ce qui permettrait d'échouer lorsqu'il est testé localement). Pour la présence du répertoire de fichiers source gcloud ci-dessous de l'actuel, et si présent, ce qui en fait le répertoire de travail, la résolution de fichiers se produira donc exactement comme lorsqu'elle est testée localement. P>

import "os"

const gcloudFuncSourceDir = "serverless_function_source_code"

func fixDir() {
    fileInfo, err := os.Stat(gcloudFuncSourceDir)
    if err == nil && fileInfo.IsDir() {
        _ = os.Chdir(gcloudFuncSourceDir)
    }
}


0 commentaires

0
votes

S'il n'y a pas de fichier go.mod (en d'autres termes, si les modules ne sont pas activés), le comportement change et les fichiers sont sous src / / , pas sous Serverless_function_source_code / . Le fichier main.go utilisé pour piloter la fonction de cloud réside dans SRC / Serverless_function_app / main / main.go .

Par exemple:

J'ai une application Go avec les deux fichiers suivants: xxx

Je l'ai déployé avec ces commandes: xxx

le résultat Était-ce que le répertoire actuel a été défini sur / srv . Dessous / srv était un arbre goroot typique avec src / et pkg / répertoires. Par exemple: xxx


0 commentaires