我有一个数据库托管在一个名为“hostinger”的平台上,数据库是一个mysql数据库,我与它的连接是这样的:程序包数据库
import (
"database/sql"
"fmt"
"log"
"os"
_ "github.com/go-sql-driver/mysql"
"github.com/joho/godotenv"
)
func Init() *sql.DB {
err := godotenv.Load(".env")
if err != nil {
log.Println("Erro ao carregar variavel de ambiente", err)
}
host := os.Getenv("HOST")
database := os.Getenv("DATABASE")
user := os.Getenv("USER")
password := os.Getenv("PASSWORD")
connection := fmt.Sprintf(`%s:%s@tcp(%s)/%s`, user, password, host, database)
db, err := sql.Open("mysql", connection)
if err != nil {
log.Println("Erro ao conectar com o banco de dados", err)
} else {
log.Println("Sucesso ao realizar conexão com banco de dados")
}
return db
}
字符串
在我的控制器中,我像这样使用与mysql的连接:
package controllers
import (
"fmt"
"log"
"net/http"
"github.com/gin-gonic/gin"
"github.com/guilherm5/database"
"github.com/guilherm5/models"
)
var DB = database.Init()
func NewUser(c *gin.Context) {
var newUser models.User
fmt.Println(DB)
err := c.ShouldBindJSON(&newUser)
if err != nil {
log.Println("Error in read body", err)
c.JSON(http.StatusBadRequest, gin.H{
"Error in read body": err.Error(),
})
return
}
query, err := DB.Prepare(`INSERT INTO usuario (nome, email, senha) VALUES (?,?,?)`)
if err != nil {
log.Println("Error in prepare query insert", err)
c.JSON(http.StatusInternalServerError, gin.H{
"Error in prepare query insert": err.Error(),
})
return
} else {
query.Exec(newUser.Nome, newUser.Email, newUser.Senha)
log.Println("Success")
c.JSON(http.StatusOK, "Success")
}
}
型
在我的localhostb上,一切都按预期工作,我可以顺利地插入用户,但是当我在fly.io上部署应用程序并尝试发送请求时,我得到错误:
{
"Error in prepare query insert": "dial tcp 127.0.0.1:3306: connect: connection refused"
}
型
我的问题是:发生此错误的可能性可能是某些防火墙阻止了我的连接?例如,我托管数据库的防火墙阻止了连接,或者我托管后端的防火墙是否阻止了连接?
提前感谢,如果你需要更多的信息,我会很乐意提供
1条答案
按热度按时间gkl3eglg1#
根据日志判断,部署的应用程序访问本地主机,但应该访问现有主机(而不是127.0.0.1)。为了更好地监视错误,通过Ping方法更改连接检查,它发出连接到数据库的真实的请求