在使用本地环境创建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
广告
将在 10 秒后关闭
bannerAds