Railsのエラー『SystemCallError: getaddrinfo: Name or service not known』の解決方法

Railsアプリケーションで「SystemCallError: getaddrinfo: Name or service not known」というエラーが発生することがある。このエラーは、DNSの名前解決に失敗した場合に発生する。リモートサーバーへの接続処理で誤ったホスト名が指定された場合や、インターネット接続に問題がある場合に起こることが多い。エラーの発生条件と解決方法を詳しく解説する。
エラーの発生条件
このエラーは、主に以下の状況で発生する。
Net::HTTP
やopen-uri
などのHTTPリクエストで無効なホスト名が指定されているdatabase.yml
などの設定ファイルで無効なホスト名が設定されているSMTP
やRedis
などの外部サービスへの接続設定が間違っている- ネットワーク接続が遮断されている
- DNSサーバーが適切に設定されていない
エラーメッセージの例
SystemCallError: getaddrinfo: Name or service not known
もしくは、次のようなメッセージが表示される場合もある。
SocketError: getaddrinfo: Name or service not known
原因1: 無効なホスト名が指定されている
無効なホスト名を指定すると、DNSの名前解決ができずエラーが発生する。
require 'net/http'
Net::HTTP.get(URI("http://invalid.example.com"))
解決策: 正しいホスト名を指定する。
Net::HTTP.get(URI("http://example.com"))
原因2: `database.yml` に誤ったホスト名が設定されている
database.yml
に存在しないホストを設定すると、データベース接続に失敗する。
default: &default
adapter: postgresql
host: invalid-db-host
database: my_app
解決策: host
を正しいものに修正する。
host: localhost
原因3: `SMTP` 設定の誤り
メール送信時に config/environments/production.rb
で無効なSMTPサーバーを指定するとエラーになる。
config.action_mailer.smtp_settings = {
address: "invalid.smtp.server",
port: 587,
domain: "example.com",
user_name: "user@example.com",
password: "password",
authentication: "plain"
}
解決策: SMTPのホスト名を修正する。
address: "smtp.example.com"
原因4: `Redis` などの外部サービスのホスト名が誤っている
Redisなどの外部サービスを使う場合、設定が間違っていると接続に失敗する。
Sidekiq.configure_server do |config|
config.redis = { url: 'redis://invalid.redis.server:6379/0' }
end
解決策: 正しいホストを設定する。
url: 'redis://localhost:6379/0'
原因5: ネットワーク接続の問題
インターネット接続が切断されている場合、DNSの解決に失敗する。
解決策: ネットワーク接続を確認する。
ping google.com
問題がある場合、Wi-Fiを再接続するか、DNS設定を変更する。
原因6: DNSサーバーの設定ミス
ローカルのDNS設定が正しくない場合、名前解決ができない。
解決策: resolv.conf
を確認し、GoogleのDNSを設定する。
nameserver 8.8.8.8
nameserver 8.8.4.4
まとめ
- 無効なホスト名を指定していないか確認する
database.yml
などの設定ファイルのhost
を正しいものに修正するSMTP
やRedis
の設定を確認し、正しいホストを指定する- ネットワーク接続をチェックし、DNS設定を見直す
これらの手順を試すことで、「SystemCallError: getaddrinfo: Name or service not known」のエラーを解決できる。
-
前の記事
Parameter format not correct – ‘X’ の解決方法 2025.06.17
-
次の記事
Fatal Error: Interfaces Cannot Contain Constant の解決方法 2025.06.17
コメントを書く