如何在Ubuntu18.04上将PostgreSQL与RubyonRails应用程序一起使用

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

介绍

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

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

先决条件

本教程需要以下内容:

  • 按照 Initial Server Setup Guide for Ubuntu 18.04 设置的 Ubuntu 18.04 服务器,包括具有 sudo 权限的非 root 用户和防火墙。
  • 安装在 Ubuntu 18.04 服务器上的 Ruby on Rails 开发环境。 要进行设置,请按照我们关于 如何在 Ubuntu 18.04 上使用 rbenv 安装 Ruby on Rails 的指南进行操作。 本教程将使用 Ruby 2.6.3 版本和 Rails 5.2.3 版本; 有关最新版本的信息,请查看 RubyRails 的官方网站。

第 1 步 – 安装 PostgreSQL

为了配置 Ruby on Rails 以使用 PostgreSQL 作为数据库创建 Web 应用程序,您首先将数据库安装到您的服务器上。

使用 sudo 权限,更新您的 APT 包索引以确保您的存储库是最新的:

sudo apt update

接下来,安装 PostgreSQL 及其开发库:

sudo apt install postgresql postgresql-contrib libpq-dev

在前面的命令中,postgresql 包包含主要的 PostgreSQL 程序,而 postgresql-contrib 添加了几个扩展其功能的 PostgreSQL 功能。 libpq-dev 是一个 PostgreSQL 库,它允许客户端发送查询并从后端服务器接收响应,这将允许您的应用程序与其数据库进行通信。

一旦安装了 PostgreSQL 及其依赖项,下一步就是创建一个角色,您的 Rails 应用程序稍后将使用它来创建您的数据库。

第 2 步 - 创建新的数据库角色

在 PostgreSQL 中,roles 可以像 Linux 中的用户一样使用来组织权限和授权。 此步骤将向您展示如何为您的 Linux 用户名创建一个新的超级用户角色,该角色将允许您在 PostgreSQL 系统中操作以创建和配置数据库。

要创建 PostgreSQL 超级用户角色,请使用以下命令,将突出显示的单词替换为您的 Ubuntu 18.04 用户名:

sudo -u postgres createuser -s sammy -P

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

在此命令中,您使用 createuser 创建了一个名为 sammy 的角色。 -s 赋予此用户超级用户权限,sudo -u 允许您从安装 PostgreSQL 时自动创建的 postgres 帐户运行命令。

注意: 由于 Ubuntu 18.04 上 PostgreSQL 的身份验证模式以 ident 开头,默认情况下,Ubuntu 用户只能以同名角色在 PostgreSQL 中操作。 有关更多信息,请查看 PostgreSQL 官方文档关于身份验证


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

sudo -u postgres psql

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

Outputpsql (10.9 (Ubuntu 10.9-0ubuntu0.18.04.1))
Type "help" for help.

postgres=#

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

\password sammy

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 将使用您为 Ubuntu 用户名创建的 PostgreSQL 角色。 为确保 Rails 创建这些数据库,您将更改项目的数据库配置文件。 然后,您将创建您的数据库。

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

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

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

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

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

source ~/.bashrc

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

在首选的文本编辑器中打开应用程序的数据库配置文件。 本教程将使用 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: sammy
  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 server 命令,在 Rails 应用程序的内置网络服务器 Puma 上运行 Web 应用程序:

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-linux)
      </p>
    </section>
  </div>
</body>
</html>

如果您的 Rails 应用程序位于远程服务器上,并且您想通过 Web 浏览器访问它,一种简单的方法是将其绑定到服务器的公共 IP 地址。 首先,在防火墙中打开端口 3000

sudo ufw allow 3000

接下来,查找服务器的公共 IP 地址。 您可以通过运行以下 curl 命令来执行此操作:

curl http://icanhazip.com

这将返回您的公共 IP 地址。 将其与 rails server 命令一起使用,将 server_public_IP 替换为您服务器的公共 IP:

rails server --binding=server_public_IP

现在,您将能够通过端口 3000 上的服务器公共 IP 地址在本地 Web 浏览器中访问您的 Rails 应用程序,方法是访问:

http://server_public_IP:3000

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

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

测试配置后,如果要关闭端口3000,请使用以下命令。

sudo ufw delete allow 3000

结论

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

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