はじめに
個人アプリを作成するにあたり、postgresqlを作成する必要がありました。
Rails+postgresqlで構成する場合、通常だとDB作成ができないため、本投稿に書いてみました。
エラーの箇所
% rails db:create
could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
Couldn't create 'Calmania_development' database. Please check your configuration.
rails aborted!
PG::ConnectionBad: could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
bin/rails:4:in `<main>'
Tasks: TOP => db:create
(See full trace by running task with --trace)
エラーの内容
厳密には訳していませんが、ポート5432が開放されていないのでエラーが出ていました。
原因&考察
mySQLのローカル環境では、localhost:3000
にアクセスしています。 3000はポート番号
postgresqlはdefaultでポート番号:5432
を使います。
通常、ポート解放しないと、その番号は使えません。
恐らく、5432は解放されていないと考えました。
アクション
postgresqlのポート変更は、Qiitaで記事が結構見られました。
postgresql.conf
の記述を変えれば、問題が解決することはわかりました。
しかし、古い記事が多いせいか、指定されたファイルの場所が見つかりません。
macのversionはCatalinaで、まずはファイルの場所を探す必要がありました。
~ % cd /usr/local/var/postgres
postgres % ls
PG_VERSION pg_ident.conf pg_snapshots pg_wal
base pg_logical pg_stat pg_xact
global pg_multixact pg_stat_tmp postgresql.auto.conf
pg_commit_ts pg_notify pg_subtrans postgresql.conf
pg_dynshmem pg_replslot pg_tblspc postmaster.opts
pg_hba.conf pg_serial pg_twophase postmaster.pid
次に、postgresql.confの変更を行います。
テキストファイルのようなので、Vim
を使って編集します。
postgres % vim postgresql.conf
vimを実行すると、中身が見る事ができます。
# -----------------------------
# PostgreSQL configuration file
# -----------------------------
#
# This file consists of lines of the form:
#
# name = value
#
# (The "=" is optional.) Whitespace may be used. Comments are introduced with
# "#" anywhere on a line. The complete list of parameter names and allowed
# values can be found in the PostgreSQL documentation.
#
# The commented-out settings shown in this file represent the default values.
# Re-commenting a setting is NOT sufficient to revert it to the default value;
# you need to reload the server.
#
省略してますが、かなりの記述量です。
ここから、該当する場所を見つけにいきます。
i
ボタンを押すと、通常モード ⇨ insertモード
中身を変更できるようになります。
↓キーを使い、該当する箇所までスクロールします。
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
#port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
#superuser_reserved_connections = 3 # (change requires restart)
#unix_socket_directories = '/tmp' # comma-separated list of directories
# (change requires restart)
#unix_socket_group = '' # (change requires restart)
#unix_socket_permissions = 0777 # begin with 0 to use octal notation
# (change requires restart)
#bonjour = off # advertise server via Bonjour
# (change requires restart)
#bonjour_name = ''
ここの #listen_assresses = 'localhost'
と#port = 5432
を変更します。
単純にコメントアウトを消せばいいのですが…
私の場合、できるだけこれまでの環境で作成したいので、5432 ⇨ 3000
に変更しました。
変更後が、以下になります。
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 3000 # (change requires restart)
max_connections = 100 # (change requires restart)
#superuser_reserved_connections = 3 # (change requires restart)
#unix_socket_directories = '/tmp' # comma-separated list of directories
# (change requires restart)
#unix_socket_group = '' # (change requires restart)
#unix_socket_permissions = 0777 # begin with 0 to use octal notation
# (change requires restart)
#bonjour = off # advertise server via Bonjour
# (change requires restart)
#bonjour_name = '' # defaults to the computer name
# (change requires restart)
ESC
ボタンを押すと insertモード ⇨ 通常モード に戻ります。
通常モードの状態で、:wq
と記述、実行します。(上書き保存)
この状態で、rails db:create
を実行しますと
rails db:create
Database 'Calmania_development' already exists
Database 'Calmania_test' already exists
もう作っているので、already出てますが、作成できるようになりました。
ローカル環境では問題ないでしょうが、デプロイする時にはまた問題が発生するかもしれません。