Ubuntu 20.04下Rails应用集成PostgreSQL:完整指南
介绍
在使用Ruby on Rails网页框架时,默认情况下应用程序将使用SQLite作为数据库。SQLite是一个轻量级、便携且用户友好的关系型数据库,在低内存环境中表现特别出色,因此在许多情况下它都能很好地运作。然而,对于需要更可靠的数据完整性和程序扩展性的高度复杂应用程序来说,选择使用PostgreSQL数据库会更为强大和灵活。您需要执行额外的步骤来配置您的Ruby on Rails设置以使用PostgreSQL。
在本教程中,您将在连接到Ubuntu 20.04服务器上的PostgreSQL数据库的Ruby on Rails开发环境中进行设置。您将安装和配置PostgreSQL,然后通过创建一个使用PostgreSQL作为其数据库服务器的Rails应用程序来测试您的设置。
先决条件
本教程需要以下物品:
- 一个已按照Ubuntu 20.04初始服务器设置指南配置好的Ubuntu 20.04服务器,包括一个具有sudo权限的非root用户和防火墙。
- 在您的Ubuntu 20.04服务器上安装了Ruby on Rails开发环境。要进行设置,请遵循如何在Ubuntu 20.04上使用rbenv安装Ruby on Rails。本教程将使用Ruby 3.1.2版本和Rails 7.0.4版本;有关最新版本的信息,请查阅Ruby官方网站和Rails官方网站。
步骤1 – 安装PostgreSQL
首先,在您的服务器上安装PostgreSQL作为您的网页应用程序数据库,然后配置Ruby on Rails与之连接。
使用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中,角色可以像Linux中的用户一样用于组织权限和授权。在此步骤中,您将为您的Linux用户名创建一个新的超级用户角色,该角色将允许您在PostgreSQL系统中创建和配置数据库。
为了创建一个PostgreSQL超级用户角色,运行以下命令,将被突出显示的单词替换为您的Ubuntu 20.04用户名。
$ sudo -u postgres createuser -s sammy -P
由于您指定了-P
标志,您将被提示输入新角色的密码。请输入您想要的密码,并确保记录下来,以便在后续步骤中可以在配置文件中使用它。
您使用 createuser
命令创建一个名为 sammy
(或您想要的用户名)的角色。-s
标志赋予该用户超级用户权限,并且使用 sudo -u
命令可以在安装 PostgreSQL 时自动创建的 postgres
账户下执行该命令。
注意:由于Ubuntu上PostgreSQL的身份验证模式默认为ident
,因此默认情况下,Ubuntu用户只能使用相同名称的角色在PostgreSQL中操作。有关更多信息,请参考PostgreSQL官方认证文档。如果您在创建角色后没有使用-P
标志,并且想要为该角色设置密码,请使用以下命令进入PostgreSQL控制台:
$ sudo -u postgres psql
您将收到以下输出,以及用于PostgreSQL控制台的提示。
psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))
Type "help" for help.
postgres=#
PostgreSQL控制台由“postgres=#
”提示符表示。在PostgreSQL提示符下,输入以下命令来设置新数据库角色的密码,将突出显示的名称替换为您创建的名称。
postgres=# \password sammy
在使用PostgreSQL时,系统将会弹出密码提示。请在提示框中输入您想要的密码,并确认。
现在,通过输入该命令来退出 PostgreSQL 控制台:
postgres=# \q
您平常的提示现在又会出现了。
在这一步中,您创建了一个具有超级用户权限的新的PostgreSQL角色。现在您准备创建一个新的Rails应用程序,使用这个角色来创建一个数据库。
步骤3 – 创建一个新的Rails应用程序
这是文章《在Ubuntu 20.04上如何将PostgreSQL与您的Ruby on Rails应用程序配合使用》的第2部分(共3部分)。
通过为PostgreSQL配置一个角色,现在可以创建一个新的Rails应用程序,该应用程序已经设置为使用PostgreSQL作为数据库。
首先,导航到您的主目录:
- cd ~
在此目录中创建一个新的Rails应用程序,将 appname 替换为您想要命名应用程序的任何名称。
- rails new appname -d=postgresql
使用“--database=postgresql
”选项将PostgreSQL设置为数据库。
一旦您运行了这个命令,一个名为 appname 的新文件夹将出现在您的主目录中,其中包含一个基本Rails应用程序的所有元素。
接下来,进入应用程序的目录:
- cd appname
既然您已经创建了一个新的Rails应用并进入了您的项目的根目录,您可以在Rails应用中配置和创建您的PostgreSQL数据库。
步骤4 – 配置和创建您的数据库
在为应用程序创建开发和测试数据库时,Rails将使用您为Ubuntu用户名创建的PostgreSQL角色。为确保Rails创建这些数据库,您需要修改项目的数据库配置文件。然后您可以创建数据库。
在Rails应用程序中进行的一项配置更改是添加在上一步中创建的PostgreSQL角色的密码。为了保护敏感信息,建议将密码存储在环境变量中,而不是直接将其写入配置文件中。
要在登录时将密码存储在环境变量中,请运行以下命令,将 APPNAME 替换为您的应用程序的名称,将 PostgreSQL_Role_Password 替换为您在上一步中创建的密码。
- echo ‘export APPNAME_DATABASE_PASSWORD=”PostgreSQL_Role_Password“‘ >> ~/.bashrc
这个命令会将导出命令写入您的 ~/.bashrc
文件中,这样登录时环境变量就会被设置。
要导出当前会话的变量,请使用 source
命令。
- source ~/.bashrc
现在您已经将密码存储在环境中,您可以更改配置文件。
用您喜欢的文本编辑器打开您的应用程序的数据库配置文件。本教程将使用nano编辑器。
- nano config/database.yml
在 default
部分下,找到 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
的那一行,并添加下面加粗的代码行,填入您的凭据和您创建的环境变量。它应该类似于这样:
...
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 + x
,然后按 Y
,再按 ENTER
保存并退出。
要了解如何在Rails中配置数据库的更多信息,请参阅Rails文档。
现在您已经对 config/database.yml
进行了更改,请使用 rails
命令创建您的应用程序数据库。
- rails db:create
一旦Rails创建了数据库,您将收到以下输出:
Created database ‘appname_development’ Created database ‘appname_test’
根据输出结果,此命令在您的PostgreSQL服务器中创建了一个开发和测试数据库。
您目前有一个已连接到您的Rails应用程序的PostgreSQL数据库。为了确保您的应用程序可以正常工作,您现在将测试您的配置。
步骤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
来指定本地主机更安全。默认情况下,应用程序监听 3000
端口。
一旦您的Rails应用程序运行起来,您的命令行提示符将会消失,替换成这个输出:
这是文章《在Ubuntu 20.04上如何将PostgreSQL与您的Ruby on Rails应用程序配合使用》的第3部分(共3部分)。
=> 启动 Puma
=> Rails 7.0.4 应用程序在开发环境中启动
=> 运行 `bin/rails server --help` 获取更多启动选项
Puma 以单模式启动...
* Puma 版本 5.6.5 (ruby 3.1.2-p20) ("Birdie's Version")
* 最小线程数: 5
* 最大线程数: 5
* 环境: development
* 监听 tcp://127.0.0.1:3000
按 Ctrl-C 停止
要测试您的应用程序是否正在运行,请在您的服务器上打开一个新的终端窗口,并使用 curl 命令向 127.0.0.1:3000 发送一个请求。
- curl http://127.0.0.1:3000
您将会收到大量的 HTML 输出,最终以某种形式结束。
... <strong>Rails 版本:</strong> 7.0.4<br /> <strong>Ruby 版本:</strong> 3.1.2 (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
现在,您可以通过访问服务器的公共 IP 地址和 3000 端口,在本地的 Web 浏览器中访问您的 Rails 应用程序。
http://server_public_IP:3000
在这个网址中,您会找到一个 Ruby on Rails 的网页。

在进行测试配置后,如果您想关闭 3000 端口,请使用以下命令。
- sudo ufw delete allow 3000
结论
在本教程中,您创建了一个 Ruby on Rails Web 应用程序,并配置了一个 Ubuntu 20.04 服务器上的 PostgreSQL 数据库。如果您想了解更多关于 Ruby 编程语言的内容,可以查看我们关于如何用 Ruby 编码的系列教程。
如果您想了解有关选择应用程序数据库的更多信息,可以查看我们关于 SQLite、PostgreSQL 和 MySQL 之间的区别及使用案例的教程。如果您想对数据库的使用有更深入的了解,可以阅读《PostgreSQL 查询简介》一文,或者探索 Silicon Cloud 的托管数据库产品。