在Ubuntu 20.04上如何将PostgreSQL与您的Ruby on Rails应用程序配合使用

介绍

在使用Ruby on Rails网页框架时,默认情况下应用程序将使用SQLite作为数据库。SQLite是一个轻量级、便携且用户友好的关系型数据库,在低内存环境中表现特别出色,因此在许多情况下它都能很好地运作。然而,对于需要更可靠的数据完整性和程序扩展性的高度复杂应用程序来说,选择使用PostgreSQL数据库会更为强大和灵活。您需要执行额外的步骤来配置您的Ruby on Rails设置以使用PostgreSQL。

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

先决条件

这个教程需要以下物品:

  • An Ubuntu 20.04 server set up by following the Initial Server Setup Guide for Ubuntu 20.04, including a non-root user with sudo privileges and a firewall.
  • A Ruby on Rails development environment installed on your Ubuntu 20.04 server. To set this up, follow How to Install Ruby on Rails with rbenv on Ubuntu 20.04. This tutorial will use version 3.1.2 of Ruby and 7.0.4 of Rails; for information on the latest versions, check out the official sites for Ruby and Rails.

步骤1- 安装PostgreSQL

首先,在你的服务器上安装PostgreSQL作为你的网页应用程序数据库,然后配置Ruby on Rails与之连接。

使用sudo特权,更新APT软件包索引,以确保您的软件仓库处于最新状态。

  1. sudo apt update

 

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

  1. sudo apt install postgresql postgresql-contrib libpq-dev

 

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

一旦安装了PostgreSQL及其相关依赖,下一步是创建一个角色,Rails应用程序将在以后使用该角色来创建数据库。

第二步-创建一个新的数据库角色

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

为了创建一个PostgreSQL超级用户角色,运行以下命令,将被突出显示的单词替换为您的Ubuntu 20.04用户名。

  1. sudo -u postgres createuser -s sammy -P

 

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

你使用 createuser 命令创建一个名为 sammy(或你想要的用户名)的角色。-s 标志赋予该用户超级用户权限,并且使用 sudo -u 命令可以在安装 PostgreSQL 时自动创建的 postgres 账户下执行该命令。

Note

注意:由于Ubuntu上PostgreSQL的身份验证模式默认为ident,因此默认情况下,Ubuntu用户只能使用相同名称的角色在PostgreSQL中操作。有关更多信息,请参考PostgreSQL官方认证文档。

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

  1. sudo -u postgres psql

 

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

Output

psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1)) Type “help” for help. postgres=#

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

  1. \password sammy

 

在使用PostgreSQL时,系统将会弹出密码提示。请在提示框中输入您想要的密码,并确认。

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

  1. \q

 

你平常的提示现在又会出现了。

在这一步中,您创建了一个具有超级用户权限的新的PostgreSQL角色。现在您准备创建一个新的Rails应用程序,使用这个角色来创建一个数据库。

步骤3-创建一个新的Rails应用程序

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

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

  1. cd ~

 

在此目录中创建一个新的Rails应用程序,将 appname 替换为您想要命名应用程序的任何名称。

  1. rails new appname -d=postgresql

 

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

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

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

  1. cd appname

 

既然你已经创建了一个新的Rails应用并进入了你的项目的根目录,你可以在Rails应用中配置和创建你的PostgreSQL数据库。

步骤4 – 配置和创建您的数据库

在为应用程序创建开发和测试数据库时,Rails将使用您为Ubuntu用户名创建的PostgreSQL角色。为确保Rails创建这些数据库,您需要修改项目的数据库配置文件。然后您可以创建数据库。

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

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

  1. echo ‘export APPNAME_DATABASE_PASSWORD=”PostgreSQL_Role_Password“‘ >> ~/.bashrc

 

这个命令会将导出命令写入你的~/.bashrc文件中,这样登录时环境变量就会被设置。

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

  1. source ~/.bashrc

 

现在你已经将密码存储在环境中,你可以更改配置文件。

用你喜欢的文本编辑器打开你的应用程序的数据库配置文件。本教程将使用nano编辑器。

  1. nano config/database.yml

 

在默认部分下,找到以下内容为pool: <%= ENV.fetch(“RAILS_MAX_THREADS”) { 5 } %>的那一行,并添加下面加粗的代码行,填入您的凭据和您创建的环境变量。它应该类似于这样:

配置文件/database.yml (peizhi wenjian / database.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 + x,然后按Y,再按ENTER保存并退出。

要了解如何在Rails中配置数据库的更多信息,请参阅Rails文档。

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

  1. rails db:create

 

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

Output

Created database ‘appname_development’ Created database ‘appname_test’

根据输出结果,此命令在你的PostgreSQL服务器中创建了一个开发和测试数据库。

您目前有一个已连接到您的Rails应用程序的PostgreSQL数据库。为了确保您的应用程序可以正常工作,您现在将测试您的配置。

第五步 – 测试您的配置

为了测试你的应用程序能够使用PostgreSQL数据库,你将运行你的Web应用程序,以便在浏览器中显示出来。

使用rails server命令,在你的Rails应用程序中运行内置的Puma网页服务器,启动你的Web应用。

  1. rails server –binding=127.0.0.1

 

–绑定将您的应用程序绑定到指定的 IP 地址。默认情况下,此标志将 Rails 绑定到 0.0.0.0,意味着 Rails 将监听所有接口,因此使用 127.0.0.1 来指定本地主机更安全。默认情况下,应用程序监听 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发送一个请求。

  1. 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。

  1. sudo ufw allow 3000

 

接下来,查找你的服务器的公共IP地址。你可以通过运行以下curl命令来实现:

  1. curl http://icanhazip.com

 

这将返回您的公共IP地址。在rails server命令中使用它,将server_public_IP替换为您服务器的公共IP。

  1. rails server –binding=server_public_IP

 

现在,你可以通过访问服务器的公共IP地址和3000端口,在本地的Web浏览器中访问你的Rails应用程序。

http://server_public_IP:3000

在这个网址中,你会找到一个Ruby on Rails的网页。

Ruby on Rails Page

如果你能够访问首页,那么你的应用程序已正确配置并连接到了PostgreSQL数据库。

在进行测试配置后,如果您想关闭3000端口,请使用以下命令。

  1. sudo ufw delete allow 3000

 

结论是

在本教程中,您创建了一个Ruby on Rails网应用程序,并配置了一个Ubuntu 20.04服务器上的PostgreSQL数据库。如果您想了解更多关于Ruby编程语言的内容,可以查看我们关于如何用Ruby编码的系列教程。

如果您想了解有关选择应用程序数据库的更多信息,可以查看我们关于SQLite、PostgreSQL和MySQL之间的区别及使用案例的教程。如果您想对数据库的使用有更深入的了解,可以阅读《PostgreSQL查询简介》一文,或者探索Silicon Cloud的托管数据库产品。

广告
将在 10 秒后关闭
bannerAds