Go学習日誌 #2022/07/06-07

生活記録アプリ

実施事項

下記を実施
・Herokuへのアップ
・バグ修正

Herokuへのアップ

Herokuへアップロードして下記URLで公開

https://lifelog-app.herokuapp.com/

アップロードにあたって、下記の修正が必要だった。
・環境変数の変更
・Postgresqlへの接続方法の変更

基本的に下記のガイドに従って実装すればOKだった。

Herokuへアップする際、go.sumをgitに含めなければいけない。
これを知らずにエラーの調査に時間がかかった。

バグ修正

何回かデータを登録していると、ステータス500でサーバが動作しなくなるバグが発見された。
(テストの時に起きていたがよくわかっていなかった)

[error] failed to initialize database, got error pq: too many connections for role

エラーを読んでいくと、どうやらDBとのコネクションが多すぎることが原因のようだった。
実際の処理は下記のようになっていた。

// DBへ接続
db := database.DataBaseConnect()
〜 なんらかの処理 〜
func DataBaseConnect() *gorm.DB {
	// Connect to Database
	sqlDB, err := sql.Open("postgres", os.Getenv("DATABASE_URL"))
	if err != nil {
		log.Fatalf("Error opening database: %q", err)
	}
	db, err := gorm.Open(postgres.New(postgres.Config{Conn: sqlDB}), &gorm.Config{})
	if err != nil {
		panic(err.Error())
	}
	return db
}

dbを使用しなくなった際にきちんとコネクションを切断してあげないといけないので、下記の様に修正。

// DBへ接続
db := database.DataBaseConnect()
〜 なんらかの処理 〜
defer database.DataBaseClose(db)
func DataBaseClose(db *gorm.DB) {
	dbc, _ := db.DB()
	dbc.Close()
}

これでエラーが解消、テスト時に全てのテストを同時に実施した際にうまくいかない問題も解消された。

その他

・トップページの説明をもう少し書き加える。
・GitHubの説明をもう少し書き加える。

この記事が気に入ったらサポートをしてみませんか?