🕌

【rails】Renderデプロイ時に遭遇した「Name or service not known」について

2023/06/27に公開1

いよいよrailsを公式に沿ってrenderにデプロイしていくぞ!という時に遭遇したエラー。

このエラーを検索すると同じような質問があるけれど回答がついていないものが多く、
他記事ではdatabase.ymlの書き方が悪い等書いてあったが間違いは見受けれらず、3日ほど頭を抱えてやっと解決できたので備忘録として残しておきます。

とりあえず、renderへのデプロイ方法はこちら
https://railstutorial.jp/chapters/beginning?version=7.0#sec-deploying
公式がわかりにくい方はこちら
https://qiita.com/yuuki-h/items/9f594c046a6e676eb8f8

エラーの内容

上記エラーが出て、最後に「==> Build failed 😞」と書かれている。
確認すると「 ActiveRecord::ConnectionNotEstablished: could not translate host name "dpg-ciaklsl9aq007t9imqcg-a" to address: Name or service not known」と書かれていた。

"dpg-ciaklsl9aq007t9imqcg-a"というのはDBのホスト名なのですが、
どうやらそのホスト名のサービスがないよ!
だからビルドに変換できないよ!という意味っぽい。

原因

上記の参考記事の下に書いている通り、
私の場合DB作成時に「Region」を設定していなかったため
デフォルトでOregon(オレゴン州)にDBサービスを作っていたようです。

でも私がrender.yamlに書いていたのはこちら。

render.yaml

databases:
  - name: myKirokun_DB
    databaseName: mykirokun_db
    user: myKirokun_api
    region: singapore

services:
  - type: web
    name: myKirokun_api
    env: ruby
    region: singapore
    plan: free
    buildCommand: "./bin/render-build.sh"
    startCommand: "bundle exec puma -C config/puma.rb"
    envVars:
      - key: DATABASE_URL
        fromDatabase:
          name: myKirokun_DB
          property: connectionString
      - key: RAILS_MASTER_KEY
        sync: false

見ればわかる通り、region:singaporeになっているにもかかわらず
oregonにDB作成しているんだから、
そりゃあ見つからないわな、という話。

対処

一生懸命サイトを漁っていたらこの記事に出会って解決した。
https://community.render.com/t/having-issue-connecting-render-hosted-rails-application-to-postgres-on-render/131

ここの回答にも書かれている通り、
render.yamlを編集するだけだとうまくいかないから
DBを作り直してね、ということなので実行。

ここをsingaporeにして、もう一度最初のサイトを参考に設定しなおしたらデプロイできました!!🙌

あとがき

私のググり力が足りないからか、なかなか最後のサイトにたどりつかなかず
もはやdatabase.ymlが間違っているのか、render.yamlが間違っているのかわけがわからず
でも開発環境では動いているんだし、設定だよなあ…。と頭を抱えていました。

こちらの記事が誰かの参考になれば幸いです!

Discussion

sunasuna123gosunasuna123go

神記事

ちょうど似たようなエラーに遭遇し頭を悩ませていたところ、こちらの記事を発見。
著者も

3日ほど頭を抱えてやっと解決できた

とのことだったので、こちらがすぐにヒットして助かりました、、、m(_ _)m