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: après cet appel Le fichier est dans le même répertoire que le fichier go source et n'est pas répertorié dans existe une disposition de dossier magique pour effectuer ce travail ou une option sur les fonctions err code> est défini sur
ouvrir list.gelhtml: aucun fichier ou répertoire de ce type code> code> < / p>
.gclouignore code> ou
.gitignore code>. 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 code> alors le fichier
list.gohtml code> est em> inclus dans la liste affichée. p>
gcloud déployer code > Commande? P> P>
3 Réponses :
J'ai créé une fonction qui énumère les fichiers téléchargés: it Sortie: p> réécriture de la fonction de modèle: < / p> fonctionne! p> Cependant, ceci est sans papiers et un hack: - ( p> L'alternative consiste à intégrer les modèles comme chaînes Dans les fichiers Golang. P> Je recommande de soumettre une demande de fonctionnalité sur le suivi de la question de Google pour Fonctions cloud p> p>
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é
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) } }
S'il n'y a pas de fichier Par exemple: P> J'ai une application Go avec les deux fichiers suivants: p> Je l'ai déployé avec ces commandes: p> le résultat Était-ce que le répertoire actuel a été défini sur go.mod code> (en d'autres termes, si les modules ne sont pas activés), le comportement change et les fichiers sont sous
src /
Serverless_function_source_code / code>. Le fichier
main.go code> utilisé pour piloter la fonction de cloud réside dans
SRC / Serverless_function_app / main / main.go code>.
/ srv code>. Dessous
/ srv code> était un arbre goroot typique avec
src / code> et
pkg / code> répertoires. Par exemple: p>