gpt4 book ai didi

mysql - 在实时站点上通过Golang连接到Cloud SQL(MySQL)

转载 作者:行者123 更新时间:2023-12-01 21:09:24 30 4
gpt4 key购买 nike

我目前有一个启动页面,并通过Google App Engine运行。到目前为止,它只是一个页面,要求用户提供他们的电子邮件和姓名,以建立电子邮件列表。我想将信息存储在Cloud sql中,但似乎无法在实时站点上正常工作。到目前为止,我正在使用MySQLWorkbench成功连接到sql上的云数据库,并且我可以输入数据并将其提交,从而成功将信息填充到云上的数据库。我没有收到任何连接错误,它可以按预期在本地主机上运行:8080 /。然后,我将更改部署到应用程序引擎并导航到该网站,填写信息,然后单击提交页面挂起,最终在我的Insert方法上返回500错误。这是我第一次在实时站点上使用DB,所以我无法理解问题是从本地主机转移到实时站点的。
main.go:


import (
"database/sql"
"fmt"
"html/template"
"log"
"net/http"
"os"
"path/filepath"
"strings"

_ "github.com/go-sql-driver/mysql"
)

// Page type
type Page struct {
Title string
}

type emailListUser struct {
ID int
Name string
email string
}

// Connect to DB
func dbConn() (db *sql.DB) {
dbDriver := "mysql"
dbUser := "jmcarthur"
dbPass := "my_password"
dbName := "tcp(ipFromGoogle:port)/tableName" // Also tried ipFromGoogle:port and ipFromGoogle

db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@"+dbName)
if err != nil {
log.Println("Failed connection")
}

return db
}

// Handlers
func emailListHandler(w http.ResponseWriter, r *http.Request) {
tpl.ExecuteTemplate(w, "emailList", &Page{Title: "Welcome to My Site"})
}

func main() {
http.HandleFunc("/", emailListHandler)
http.HandleFunc("/insert", Insert)
fs := http.FileServer(http.Dir("static"))
http.Handle("/css/", fs)
http.Handle("/fonts/", fs)
http.Handle("/img/", fs)
http.Handle("/templates/", fs)

fmt.Println(http.ListenAndServe(":8080", nil))
}

var tpl = func() *template.Template {
t := template.New("")
err := filepath.Walk("./", func(path string, info os.FileInfo, err error) error {
if strings.Contains(path, ".html") {
fmt.Println(path)
_, err = t.ParseFiles(path)
if err != nil {
fmt.Println(err)
}
}
return err
})

if err != nil {
panic(err)
}
return t
}()

// Insert function
func Insert(w http.ResponseWriter, r *http.Request) {
db := dbConn()

if r.Method == "POST" {
email := r.FormValue("email")
name := r.FormValue("name")

insForm, err := db.Prepare("INSERT INTO emailList(email_address, name) VALUES(?,?)")
if err != nil {
panic(err.Error())
}

insForm.Exec(email, name)
log.Println("INSERT: Email: " + email + " | Name: " + name)
}

defer db.Close()
http.Redirect(w, r, "/", 301)
}

/* CREATE TABLE tableName(
email_id INT NOT NULL AUTO_INCREMENT,
email_address VARCHAR(320) NOT NULL,
name VARCHAR(150) NOT NULL,
PRIMARY KEY (email_id)
); */
emailList.html
{{define "emailList"}}
<!DOCTYPE html>
<html lang="en">
{{template "header" .}}
<body id="emailListBody" class="text-center">
<div id="emailListContainer" class="col-12 text-center">
<img src="./img/picture.png" height="250px" width="250px">
<h1 class="text-center" id="slogan">slogan</h1>
<div id="formDiv" class="text-center">
<form method="POST" action="insert">
<label for="email" class="col-12" id="emailLabel">Email:</label>
<input type="email" required placeholder="johndoe@email.com" id="email" name="email">
<label for="name" class="col-12" id="nameLabel">Name:</label>
<input type="text" required placeholder="John Doe" id="name" name="name">
<div class="col">
<button class="btn btn-default" id="submitButton">SUBMIT</button>
</div>
</form>
</div>
</div>
{{template "footer" .}}
{{end}}
树:
.
├── app.yaml
├── cloud_sql_proxy
├── main.go
└── static
├── css
│   └── main.css
├── emailList.html
├── fonts
│   ├── EuroStyle\ Normal.ttf
│   ├── EurostileBold.ttf
│   └── ethnocentric\ rg.ttf
├── img
│   ├── picture.png
├── js
└── templates
├── footer.html
└── header.html
正如我所说,我可以在本地成功运行它,但是我一生都无法在实时站点上运行它。我确保将我的IP列入白名单,尝试在有端口和无端口的情况下以多种不同方式连接IP(如在main.go中可以看到的那样),但是每次获得 POST mysite [HTTP/2 500 Internal Server Error 1857ms]时。我相信我对Cloud sql感到困惑,并允许任何IP将数据发送到数据库,但是我可能完全错了。请帮忙,谢谢!!

最佳答案

如果问题不在于您的连接字符串,则App Engine的过程还有更多问题,例如permissions(标准)或permissions(Flex)。
另外,变量dbName中的/ tableName字符串似乎表示表名吗?看this示例,有和实例+ dbname,没有表。实例是数据库名称的分组。但是,如果您的代码在本地使用相同的配置在Cloud SQL上有效,则关闭此部分并仅查看权限。
有太多的可能性。请进一步隔离使用公开的Google文档作为测试。

关于mysql - 在实时站点上通过Golang连接到Cloud SQL(MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63816516/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com