qua*_*123 3 google-app-engine go
新问题:我在Google上可以找到的所有内容都表明CloudSQL连接器应该正常工作,但源代码本身除外(导入SDK的cloudsql不起作用).是否有一些地方我可以找到这个更新的库,如果它存在?
---编辑:我有我的答案:似乎问题出在CloudSQL本身而不是驱动程序或类似的东西上.---
我正在尝试从Google App Engine Go程序访问CloudSQL.我使用Go 1.2.1和Go 1.4.2尝试了go-sql-driver/mysql和ziutek/mymysql.我已经尝试了go-sql-driver的go get版本并直接从Github克隆它.我已经尝试了App Engine安装程序和存档.
每次我尝试使用我的应用程序访问数据库时,生成的网页都会声明:cloudsql:尚未支持dev
我在这里看到了另一个类似的问题,尝试了那里注意到的一切,但都没有奏效.
有问题的代码:
import (
_ "github.com/go-sql-driver/mysql"
_ "appengine/cloudsql"
"database/sql"
"net/http"
)
func adminLogin(w http.ResponseWriter, r *http.Request) {
username := formatter(r.FormValue("username"))
password := formatter(r.FormValue("password"))
db, err := sql.Open("mysql",
"root:password@cloudsql(ws-virtual-classroom:database)/logins") // And all the variations on that string I could think of...
defer db.Close()
if err != nil {
log.Print(err)
} else {
rows, err := db.Query("SELECT username FROM admin_logins WHERE username=? AND password=? LIMIT 1", username, password)
defer rows.Close()
if err != nil {
log.Print(err)
} else {
var user string
for rows.Next() {
err = rows.Scan(&user)
if err != nil {
log.Print(err)
} else {
makeCookie(w, r, user, true, true)
}
}
}
}
teachersHome(w, r)
}
Run Code Online (Sandbox Code Playgroud)
结果(在我提交登录表单后显示在我的浏览器中):
the runtime process gave a bad HTTP response: ''
2015/05/17 01:53:06 cloudsql: not supported in dev yet
2015/05/17 01:53:06 http: panic serving 127.0.0.1:56970: runtime error: invalid memory address or nil pointer dereference
goroutine 12 [running]:
net/http.func·011()
/tmp/appengine/go_appengine/goroot/src/net/http/server.go:1130 +0xbb
database/sql.(*Rows).Close(0x0, 0x0, 0x0)
/tmp/appengine/go_appengine/goroot/src/database/sql/sql.go:1659 +0x31
main57750.adminLogin(0x7f76a72ef5d8, 0xc208045860, 0xc2080c4820)
main.go:208 +0x25a
net/http.HandlerFunc.ServeHTTP(0x927c78, 0x7f76a72ef5d8, 0xc208045860, 0xc2080c4820)
/tmp/appengine/go_appengine/goroot/src/net/http/server.go:1265 +0x41
github.com/gorilla/mux.(*Router).ServeHTTP(0xc20800c730, 0x7f76a72ef5d8, 0xc208045860, 0xc2080c4820)
/home/daniel/go/src/github.com/gorilla/mux/mux.go:98 +0x297
net/http.(*ServeMux).ServeHTTP(0xc20803a6f0, 0x7f76a72ef5d8, 0xc208045860, 0xc2080c4820)
/tmp/appengine/go_appengine/goroot/src/net/http/server.go:1541 +0x17d
appengine_internal.handleFilteredHTTP(0x7f76a72ef5d8, 0xc208045860, 0xc2080c4820)
/tmp/appengine/go_appengine/goroot/src/appengine_internal/api_dev.go:98 +0x413
net/http.HandlerFunc.ServeHTTP(0x927248, 0x7f76a72ef5d8, 0xc208045860, 0xc2080c4820)
/tmp/appengine/go_appengine/goroot/src/net/http/server.go:1265 +0x41
net/http.serverHandler.ServeHTTP(0xc208042540, 0x7f76a72ef5d8, 0xc208045860, 0xc2080c4820)
/tmp/appengine/go_appengine/goroot/src/net/http/server.go:1703 +0x19a
net/http.(*conn).serve(0xc2080457c0)
/tmp/appengine/go_appengine/goroot/src/net/http/server.go:1204 +0xb57
created by net/http.(*Server).Serve
/tmp/appengine/go_appengine/goroot/src/net/http/server.go:1751 +0x35e
Run Code Online (Sandbox Code Playgroud)
这是用goapp服务运行时.如果我部署它我似乎有同样的问题 - 结果页面是空白而不是显示该文本,但日志错误消息是相同的.
更新后的图书馆位于:https://godoc.org/google.golang.org/appengine.它没有CloudSQL.也许你应该在本地使用常规的mysql连接:
func dialSQL() (*sql.DB, error) {
if appengine.IsDevAppServer() {
// or sql.Open("mysql", "user-name:password@ip-address-of-google-cloud-sql-instance/dbname")
return sql.Open("mysql", "user:password@/dbname")
}
return sql.Open("mysql", "cloudsql:my-instance*dbname/user/passwd")
}
Run Code Online (Sandbox Code Playgroud)
使用本地数据库通常是最佳选择,因为连接到实时数据库可能非常危险.例如,很容易意外地对生产数据库运行测试并丢弃所有内容.
不过,Google在此处提供了连接CloudSQL的说明:https://cloud.google.com/sql/docs/introduction .第三方工具的说明也适用于Go.
归档时间: |
|
查看次数: |
917 次 |
最近记录: |