Не могу создать файл для производственной среды - PullRequest
0 голосов
/ 21 января 2020

Я использую Google Cloud Platform (GCP) и Golang.

Моя локальная среда может выполнять код, но не может производственная среда (GCP).

Я вижу журнал. =>

open stylesheet/qrcode.png: no such file or directory 
read-only file system

Так что я пробую chmod. пример) chmod 644 или 777 qrcode.png

Я пытаюсь создать образ: qrcode.png <= Это файл-пустышка. Но код не запускается. </p>

Есть ли другой способ?

package main

import (
    "fmt"
    "image/png"
    "log" ............

    "github.com/boombuler/barcode"
    "github.com/boombuler/barcode/qr"
)


func createQr() {
    rand.Seed(time.Now().UnixNano())
    result = ""
    for i := 0; i < 4; i++ {
        s := strconv.Itoa(rand.Intn(10))
        result = result + s
    }
    qrCode, _ := qr.Encode(result, qr.M, qr.Auto) //info
    qrCode, _ = barcode.Scale(qrCode, 200, 200)   //size

    PIN, _ = strconv.Atoi(result)
    file, _ := os.Create("stylesheet/qrcode.png")
    defer file.Close()

    // encode the barcode as png
    png.Encode(file, qrCode)
    fmt.Println(file)

    starttime = time.Now()
}

file, _ := os.Create("stylesheet/qrcode.png")

Этот код не работает.

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Если вы развертываете в App Engine Standard, вы можете писать только в папку /tmp в файловой системе .

Будьте осторожны с тем, что вы собираетесь делать с сгенерированным файл. Генерирование его в файловой системе одного экземпляра не делает его доступным для обслуживания, как файлы CSS и JS вашего приложения. Кроме того, предполагается, что экземпляры не имеют состояния, ваш следующий запрос может попасть в любой другой экземпляр, и любой экземпляр часто отключается автоскалером.

Мой совет:

  • , если вы хотите чтобы обслужить его только один раз, тогда ваш обработчик должен сделать только это и направить байты QR-кода PNG в ResponseWriter (который реализует io.Writer) и установить соответствующий заголовок ответа content-type. Нет необходимости использовать файл.
  • Если вам нужно, чтобы сгенерированный файл изображения был постоянным, сохраните его либо в облачном хранилище, либо в Firestore. Тогда вам потребуется стратегия для правильного обслуживания через https (права доступа к объектам в облачном хранилище, обработчик App Engine для Firestore).

Кроме того, всегда проверяйте и обрабатывайте ошибки, никогда не глотайте их с помощью _!

0 голосов
/ 21 января 2020

Есть ли в вашей производственной среде сетевой путь к github для импорта. Посмотрите на ваши файлы журнала, и вы можете обнаружить, что он не может найти github. В большинстве производственных сред нет сетевого пути к inte rnet.

. Вам нужно будет загрузить и отправить эти внешние пакеты как часть вашей базы кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...