PostgreSQLがインストールされていないために発生するエラー対処の記事となります。PostgreSQLの使い方の記事ではありませんので、ご了承くださいませ。
はじめに
Railsのハンズオンや環境構築資料でよく見かける以下の rails new コマンド。
$ rails new test_app -d postgresql
# --database=postgresql と読み替えていただいて問題ありません。
データベースオプションである、-d postgresql
を指定することで、Railsと同時にPostgreSQLのセットアップをすることができます。※デフォルトはsqlite3が指定される。
しかし、ローカル環境にPostgreSQL自体をインストールしていない場合、pg gem(PostgreSQLのRubyライブラリ)のインストール中にエラーが発生する可能性がありますので、以下備忘録として、手順を残したいと思い記事にしてみました。
※ 現在プログラミングスクールに通っております。カリキュラムではDockerを使用しているため、ローカルでの環境構築の機会が少ないかつ慣れないエラーが多発しやすいため、少しでも参考になりましたら幸いです。
実行環境
- Mac OS
- Homebrew
- Ruby 3.2.2
- Ruby on Rails 7.0.8
PostgreSQLをインストールしていない状況での rails new
$ rails new test_app -d postgresql
エラー内容(一部抜粋):
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
...
checking for pg_config... no
checking for libpq per pkg-config... no
Using libpq from
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*****************************************************************************
Unable to find PostgreSQL client library.
Please install libpq or postgresql client package like so:
brew install libpq
こちらは、PostgreSQLのクライアントライブラリ(libpq)が見つからないため、pg
gemのインストールに失敗している旨のエラーとなります。libpqは、PostgreSQLへの接続等を行うために使用されるため、インストールをする必要がありますが、PostgreSQL自体のパッケージに含まれているため、PostgreSQLをインストールすれば自動的に利用可能になります。
以下、具体的な手順を記載します。
PostgreSQLのインストール
まず、Homebrewを使用して、ローカルにPostgreSQLをインストールします。
$ brew install postgresql
PostgreSQLのバージョンを確認します。
$ postgres --version
postgres (PostgreSQL) 14.10 (Homebrew)
PostgreSQLサービスの起動
PostgreSQLをインストール後、サービスを起動する必要があります。
$ brew services start postgresql
※ サービスを停止したい場合
$ brew services stop postgresql
Railsアプリケーションのセットアップ
PostgreSQLがインストールされ、サービスが起動していることを確認したら、再度 rails new
コマンドを実行します。
$ rails new test_app -d postgresql
データベースの作成
Railsアプリケーションのセットアップが完了したら、次はRails内でデータベースを作成します。
$ rails db:create
Railsサーバーが立ち上がることを確認して、http://localhost:3000/ にアクセスする
$ rails s
以上となります。ありがとうございました。
PostgreSQLサービスを起動していない場合
サービスを起動していない場合は以下のようなエラーが出ます。
ActiveRecord::ConnectionNotEstablished
connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
Extracted source (around line #87):
raise ActiveRecord::DatabaseConnectionError.hostname_error(conn_params[:hostname])
else
raise ActiveRecord::ConnectionNotEstablished, error.message
end
end
end
サービスを起動することで解決します。
$ brew services start postgresql