介绍
在使用 Ruby on Rails web 框架时,你的应用程序默认会使用 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
要为您的Web应用程序配置Ruby on Rails以使用PostgreSQL作为数据库,您首先需要在服务器上安装数据库。
使用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控制台的提示:
Outputpsql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))
Type "help" for help.
postgres=#
PostgreSQL控制台由postgres=#
提示表示。在PostgreSQL提示符下,输入以下命令为新数据库角色设置密码,将突出显示的名称替换为您创建的名称:
- \password sammy
PostgreSQL将提示您输入密码。在提示符下输入所需的密码,然后确认。
现在,通过输入以下命令退出PostgreSQL控制台:
- \q
您的常规提示现在将重新出现。
在这一步中,您创建了一个具有超级用户权限的新PostgreSQL角色。现在,您可以准备创建一个新的Rails应用程序,该应用程序将使用此角色来创建数据库。
步骤 3 – 创建新的 Rails 应用
配置了 PostgreSQL 角色后,您现在可以创建一个新的 Rails 应用,该应用已设置使用 PostgreSQL 作为数据库。
首先,导航到您的主目录:
- cd ~
在此目录中创建一个新的 Rails 应用,将appname
替换为您想要为应用命名的内容:
- rails new appname -d=postgresql
-d=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
此命令将export
命令写入您的~/.bashrc
文件中,以便在登录时设置环境变量。
要为当前会话导出变量,请使用source
命令:
- source ~/.bashrc
现在您已经将密码存储在您的环境中,您可以修改配置文件。
在您首选的文本编辑器中打开应用程序的数据库配置文件。本教程将使用nano
:
- nano config/database.yml
在default
部分下,找到一行,其中写着pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
,然后添加以下突出显示的行,填写您的凭据和您创建的环境变量。它应该看起来像这样:
...
default: &default
adapter: postgresql
encoding: unicode
# 关于连接池的详细信息,请参阅Rails配置指南
# 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创建了数据库,您将收到以下输出:
OutputCreated database 'appname_development'
Created database 'appname_test'
如输出所示,此命令在您的PostgreSQL服务器中创建了一个development
和test
数据库。
您现在已经将PostgreSQL数据库连接到了您的Rails应用程序。为确保您的应用程序正常运行,您将测试您的配置。
步骤5 – 测试您的配置
为了测试您的应用程序能够使用PostgreSQL数据库,您将运行您的Web应用程序,以便它在浏览器中显示。
使用rails server
命令,在Rails应用程序中的内置Web服务器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 7.0.4 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma Version 5.6.5 (ruby 3.1.2-p20) ("Birdie's Version")
* 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> 7.0.4<br />
<strong>Ruby version:</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` 命令一起使用,用您服务器的公共 IP 替换 `server_public_IP
`:
- rails server --binding=server_public_IP
现在,您将能够通过服务器的公共 IP 地址和端口 `3000` 在本地 Web 浏览器中访问您的 Rails 应用,访问:
http://server_public_IP:3000
在此 URL 中,您将找到一个 Ruby on Rails 页面:
如果您能访问主页,则说明您的应用已正确配置并连接到 PostgreSQL 数据库。
配置测试完成后,如果您想关闭端口3000
,请使用以下命令。
- sudo ufw delete allow 3000
结论
在本教程中,您创建了一个 Ruby on Rails web 应用程序,并配置其在 Ubuntu 20.04 服务器上使用 PostgreSQL 作为数据库。如果您想了解更多关于 Ruby 编程语言的信息,请查看我们的系列教程如何使用 Ruby 编码。
有关为应用程序选择数据库的更多信息,请查看我们关于SQLite、PostgreSQL 和 MySQL 差异及使用案例的教程。如果您想了解更多关于如何使用数据库的信息,请参阅PostgreSQL 查询入门文章,或探索 DigitalOcean 的托管数据库产品。