この土日、定期的に動かしているブログのビルドが失敗するようになりました。調べてみるとブログのリンクカードみたいなのを作るために自前のサーバーにOGPを取りに行く際、とあるリンク先のドメインが見つからずに500エラーで返って来ていることが原因でした。ドメインの有効期限が切れたか何かだと思われます。
ちなみにリンクカードやサーバーについてはこのへんとか、
このへんとかに、書いてあります。
というわけでサーバー側のコードを修正しました。エラーで失敗したときに400番台、500番台を返すとビルドが止まるようだったので、OGPの取得に失敗したとしても200を返すようにしました。
対応前
og, err := opengraph.Fetch(url)
if err != nil {
return ctx.String(http.StatusInternalServerError, fmt.Sprintf("Error: %s", err.Error()))
}
対応後
og, err := opengraph.Fetch(url)
if err != nil {
m := map[string]string{"error": fmt.Sprintf("Error: %s", err.Error())}
return ctx.JSON(http.StatusOK, m)
}
元々はFetch
でエラーが返ってきたときは500エラーで文字列を返していたのを、200でエラーのJSONを返すように変更。そして、Hugo側のHTML(というかテンプレート)でerror
の有り無しで分岐をすることに。
{{- $json := getJSON .Site.Params.OgpJsonBaseUrl $url -}}
{{- $error := $json.error -}}
{{ if eq $error nil }}
元々のHTML
{{ else }}
<a href="{{ $url }}" target="_blank">
{{$url}}
</a>
{{ end }}
エラー有りで返ってきた場合は単にURLの文字列のリンクとするように変えました。これで無事ビルドできるようになりました。