在使用本地环境创建Rails项目时,如果使用 “-d postgresql” 选项出现错误的解决方法和 PostgreSQL 的安装【Rails 7, Mac OS】
由于未安装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 等操作,因此需要进行安装。但由于 libpq 包含在 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