如何在macOS上将PostgreSQL与RubyonRails应用程序一起使用

来自菜鸟教程
跳转至:导航、​搜索

介绍

当使用 Ruby on Rails Web 框架时,您的应用程序默认设置为使用 SQLite 作为数据库。 SQLite 是一个轻量级、可移植且用户友好的关系数据库,它在低内存环境中表现得特别好,并且在许多情况下都能很好地工作。 然而,对于需要更可靠的数据完整性和程序可扩展性的高度复杂的应用程序,PostgreSQL 数据库将是更健壮和灵活的选择。 为了配置您的 Ruby on Rails 设置以使用 PostgreSQL,您需要执行一些额外的步骤来启动和运行它。

在本教程中,您将在本地 macOS 机器上设置一个连接到 PostgreSQL 数据库的 Ruby on Rails 开发环境。 您将安装和配置 PostgreSQL,然后通过创建一个使用 PostgreSQL 作为其数据库服务器的 Rails 应用程序来测试您的设置。

先决条件

本教程需要以下内容:

  • 一台安装了 macOS 的计算机或虚拟机,具有对该计算机的管理访问权限和 Internet 连接。 本教程已在 macOS 10.14 Mojave 上进行了测试。
  • 安装在 macOS 机器上的 Ruby on Rails 开发环境。 要进行设置,请按照我们关于 如何在 macOS 上使用 rbenv 安装 Ruby on Rails 的指南进行操作。 本教程将使用 Ruby 2.6.3 版本和 Rails 5.2.3 版本; 有关最新版本的信息,请查看 RubyRails 的官方网站。

第 1 步 — 安装 PostgreSQL

为了配置 Ruby on Rails 以使用 PostgreSQL 作为数据库创建 Web 应用程序,您首先将数据库安装到您的机器上。 虽然 有很多方法可以在 macOS 上安装 PostgreSQL,但本教程将使用包管理器 Homebrew

有多个 Homebrew 包可以安装不同版本的 PostgreSQL。 要安装最新版本,请运行以下命令:

brew install postgresql

如果您想下载特定版本的 PostgreSQL,请将前面命令中的 postgresql 替换为您想要的包。 您可以在 Homebrew 网站 上找到可用的软件包。

接下来,在您的 PATH 变量中包含 PostgreSQL 二进制文件以访问 PostgreSQL 命令行工具,确保将 10 替换为您正在使用的版本号:

echo 'export PATH="/usr/local/opt/postgresql@10/bin:$PATH"' >> ~/.bash_profile

然后,将您对 ~/.bash_profile 文件所做的更改应用到当前的 shell 会话:

source ~/.bash_profile

要启动服务并使其在登录时启动,请运行以下命令:

brew services start postgresql@10

检查以确保安装成功:

postgres -V

您将获得以下输出:

Outputpostgres (PostgreSQL) 10.9

安装 PostgreSQL 后,下一步是创建一个角色,Rails 应用程序稍后将使用该角色创建数据库。

第 2 步 — 为您的应用程序创建数据库角色

在PostgreSQL中,roles可以用来组织权限和授权。 使用 Homebrew 启动 PostgreSQL 时,您将自动使用您的 macOS 用户名创建一个超级用户角色。 为了将这些超级用户权限与您用于 Rails 应用程序的数据库实例分开,在此步骤中,您将创建一个具有较少访问权限的新角色。

要创建新角色,请运行以下命令,将 appname 替换为您想为该角色指定的任何名称:

createuser -P -d appname

在此命令中,您使用 createuser 创建了一个名为 appname 的角色。 -d 标志赋予角色创建新数据库的权限。

您还指定了 -P 标志,这意味着您将被提示输入新角色的密码。 输入您想要的密码,确保将其记录下来,以便您可以在以后的步骤中在配置文件中使用它。

如果您没有使用 -P 标志并希望在创建角色后为其设置密码,请使用以下命令进入 PostgreSQL 控制台:

psql postgres

您将收到以下输出,以及 PostgreSQL 控制台的提示:

Outputpsql (10.9)
Type "help" for help.

postgres=#

PostgreSQL 控制台由 postgres=# 提示符指示。 在 PostgreSQL 提示符下,输入此命令以设置新数据库角色的密码,将突出显示的名称替换为您创建的名称:

\password appname

PostgreSQL 将提示您输入密码。 在提示符处输入您想要的密码,然后确认。

现在,通过输入以下命令退出 PostgreSQL 控制台:

\q

您通常的提示现在将重新出现。

在此步骤中,您为您的应用程序创建了一个没有超级用户权限的新 PostgreSQL 角色。 现在您已准备好创建一个使用此角色创建数据库的新 Rails 应用程序。

第三步——创建一个新的 Rails 应用程序

为 PostgreSQL 配置角色后,您现在可以创建一个新的 Rails 应用程序,该应用程序设置为使用 PostgreSQL 作为数据库。

首先,导航到您的主目录:

cd ~

在此目录中创建一个新的 Rails 应用程序,将 appname 替换为您想要调用的应用程序:

rails new appname -d=postgresql

-d=postgresql 选项将 PostgreSQL 设置为数据库。

运行此命令后,一个名为 appname 的新文件夹将出现在您的主目录中,其中包含基本 Rails 应用程序的所有元素。

接下来,进入应用程序的目录:

cd appname

现在您已经创建了一个新的 Rails 应用程序并移至项目的根目录,您可以在 Rails 应用程序中配置和创建 PostgreSQL 数据库。

第 4 步 — 配置和创建数据库

在为您的应用程序创建 developmenttest 数据库时,Rails 将使用您在步骤 2 中创建的 PostgreSQL 角色。 为确保 Rails 创建这些数据库,您将更改项目的数据库配置文件。 然后,您将创建您的数据库。

在 Rails 应用程序中进行的配置更改之一是为您在上一步中创建的 PostgreSQL 角色添加密码。 为了保证密码等敏感信息的安全,最好将其存储在环境变量中,而不是将其直接写入配置文件中。

要在登录时将密码存储在环境变量中,请运行以下命令,将 APPNAME 替换为您的应用程序名称,将 PostgreSQL_Role_Password 替换为您在上一步中创建的密码:

echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bash_profile

此命令将 export 命令写入您的 ~/.bash_profile 文件,以便在登录时设置环境变量。

要为当前会话导出变量,请使用 source 命令:

source ~/.bash_profile

现在您已将密码存储在环境中,是时候更改配置文件了。

在首选的文本编辑器中打开应用程序的数据库配置文件。 本教程将使用 nano

nano config/database.yml

default 部分下,找到显示 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 的行并添加以下突出显示的行,填写您的凭据和您创建的环境变量。 它应该看起来像这样:

配置/数据库.yml

...
default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: appname
  password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>

development:
  <<: *default
  database: appname_development
...

这将使 Rails 应用程序使用正确的角色和密码运行数据库。 按 CTRL+XY,然后按 ENTER 保存并退出。

有关在 Rails 中配置数据库的更多信息,请参阅 Rails 文档

现在您已经对 config/database.yml 进行了更改,使用 rails 命令创建应用程序的数据库:

rails db:create

Rails 创建数据库后,您将收到以下输出:

OutputCreated database 'appname_development'
Created database 'appname_test'

正如输出所示,此命令在您的 PostgreSQL 服务器中创建了 developmenttest 数据库。

您现在有一个 PostgreSQL 数据库连接到您的 Rails 应用程序。 为确保您的应用程序正常工作,下一步是测试您的配置。

第 5 步 — 测试您的配置

要测试您的应用程序是否能够使用 PostgreSQL 数据库,请尝试运行您的 Web 应用程序,以便它显示在浏览器中。

首先,您将使用 Rails 的内置 Web 服务器 Puma 来为您的应用程序提供服务。 此 Web 服务器自动附带 Rails,无需额外设置。 要为您的应用程序提供服务,请运行以下命令:

rails server --binding=127.0.0.1

--binding 将您的应用程序绑定到指定的 IP。 默认情况下,此标志会将 Rails 绑定到 0.0.0.0,但由于这意味着 Rails 将侦听所有接口,因此使用 127.0.0.1 指定 localhost 更安全。 默认情况下,应用程序侦听端口 3000

一旦您的 Rails 应用程序运行,您的命令提示符将消失,取而代之的是以下输出:

Output=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
Use Ctrl-C to stop

要测试您的应用程序是否正在运行,请在服务器上打开一个新的终端窗口并使用 curl 命令向 127.0.0.1:3000 发送请求:

curl http://127.0.0.1:3000

您将收到大量 HTML 输出,以类似以下的形式结束:

Output...
        <strong>Rails version:</strong> 5.2.3<br />
        <strong>Ruby version:</strong> 2.6.3 (x86_64-darwin18)
      </p>
    </section>
  </div>
</body>
</html>

您还可以通过以下方式在本地 Web 浏览器中访问您的 Rails 应用程序:

http://127.0.0.1:3000

在这个 URL 上,您会找到一个 Ruby on Rails 欢迎页面:

这意味着您的应用程序已正确配置并连接到 PostgreSQL 数据库。

结论

在本教程中,您创建了一个 Ruby on Rails Web 应用程序,该应用程序被配置为使用 PostgreSQL 作为本地 macOS 机器上的数据库。 如果您想了解有关 Ruby 编程语言的更多信息,请查看我们的 如何在 Ruby 中编码系列

有关为您的应用程序选择数据库的更多信息,请查看我们关于 SQLite、PostgreSQL 和 MySQL 之间的区别和用例的教程。 如果您想了解更多关于如何使用数据库的信息,请参阅我们的 An Introduction to Queries in PostgreSQL 文章,或探索 DigitalOcean 的 Managed Databases 产品