如何在 Ruby On Rails 应用程序中使用 PostgreSQL

即使默认数据库 SQLite3 与 Ruby on Rails,我们不应该在某些情况下使用它。 例如,如果您的 Rails 应用程序正被大量用户同时访问,则不推荐使用 SQLite。 我们应该尝试更健壮的数据库,如 MySQL 或 PostgreSQL,它们提供可扩展性、并发性、集中化和控制。 我们已经知道如何使用 MySQL 与 Rails 应用程序. 今天,我们将了解如何在 Ubuntu Linux 中将 PostgreSQL 与 Ruby on Rails 应用程序一起使用。

先决条件

我假设您已经在 Linux 系统上安装了最新的 Ruby on Rails。 如果没有,请参阅以下指南。

  • 如何在 Linux 中安装 Ruby On Rails

1.安装PostgreSQL

要在 Debian、Ubuntu 及其衍生版本中安装 PostgreSQL,请运行:

$ sudo apt install postgresql postgresql-contrib libpq-dev

此命令将安装 PostgreSQL 以及所有必需的依赖项。 在这里, libpq-dev 是一个 PostgreSQL 库,它允许客户端程序将查询传递给 PostgreSQL 后端服务器并接收这些查询的结果。 当您设置 Rails 应用程序时,需要此库才能连接到 PostgreSQL。

确保 postgresql 服务已启动并在启动时启用:

$ sudo systemctl start postgresql
$ sudo systemctl enable postgresql

要查看 postgresql 服务的当前状态,请运行:

$ systemctl status postgresql

1.1。 创建新的数据库角色

我们需要一个专门的数据库用户(角色)来创建和配置数据库或我们的 Rails 应用程序。

要在 PostgreSQL 中创建新的数据库角色,请从终端运行以下命令:

$ sudo -u postgres createuser -s ostechnix -P

这里,

  • sudo -u postgres – 允许您从 postgres 帐户。
  • createuser -s ostechnix – 创建一个名为的新角色 ostechnix 具有超级用户权限。
  • -P – 提示您输入新角色的密码。

2. 在 Linux 中使用 PostgreSQL 和 Ruby on Rails 应用程序

创建一个名为的新 Rails 应用程序 ostechnixapp 并使用 PostgreSQL 作为其默认数据库,运行:

$ rails new ostechnixapp -d postgresql

这将创建一个名为的 Rails 应用程序 ostechnixapp 在一个名为 ostechnixapp 并安装中已经提到的 gem 依赖项 Gemfile 使用 bundle install.

创建后 ostechnixapp 应用程序,切换到其目录:

$ cd ostechnixapp/

编辑应用程序的数据库配置文件:

$ vi config/database.yml

在下面 default 部分,添加我们在上一步中创建的 PosgreSQL 数据库角色及其密码:

[...]
default: &default
   adapter: postgresql
   encoding: unicode
   # For details on connection pooling, see Rails configuration guide
   # https://guides.rubyonrails.org/configuring.html#database-pooling
   pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
   username: ostechnix
   password: Password123#@!
[...]
在 Rails 应用程序数据库配置文件中设置 PostgreSQL 用户及其密码

将用户名及其密码替换为您自己的。 按 ESC 并输入 :wq 保存和 close 文件。

现在使用命令为您的 Rails 应用程序创建新数据库:

$ rake db:create

这将使用 Rails 应用程序的名称创建两个数据库。 为了 example,如果应用程序名称是 ostechnixapp,那么它会创建 ostechnixapp_developmentostechnixapp_test.

Created database 'ostechnixapp_development'
Created database 'ostechnixapp_test'

如果数据库也从 PosgreSQL 成功创建,您可以验证它。

登录到 PosgreSQL:

$ sudo -u postgres psql

在 postgresql 提示符下,运行 l 列出可用的数据库:

postgres=# l

样本输出:

                                       List of databases
            Name           |   Owner   | Encoding | Collate |  Ctype  |   Access privileges   
 --------------------------+-----------+----------+---------+---------+-----------------------
  ostechnixapp_development | ostechnix | UTF8     | C.UTF-8 | C.UTF-8 | 
  ostechnixapp_test        | ostechnix | UTF8     | C.UTF-8 | C.UTF-8 | 
  postgres                 | postgres  | UTF8     | C.UTF-8 | C.UTF-8 | 
  template0                | postgres  | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
                           |           |          |         |         | postgres=CTc/postgres
  template1                | postgres  | UTF8     | C.UTF-8 | C.UTF-8 | =c/postgres          +
                           |           |          |         |         | postgres=CTc/postgres
 (5 rows)
 postgres=# 
将 PostgreSQL 与 Ruby on Rails 应用程序一起使用

Exit 从 PostgreSQL 提示符输入 q.

postgres=# q

现在使用命令启动 Rails Web 服务器:

$ rails server -b 0.0.0.0

这将在默认端口上启动您的 Rails 应用程序 3000. 在这里,我们通过了参数 -b 0.0.0.0 为了从局域网上的任何机器访问 Rails 应用程序。

打开您的 Web 浏览器并通过导航到 URL 访问您的 Rails 测试页面: https://ip-address:3000.

Ruby on Rails 应用程序测试页面Ruby on Rails 应用程序测试页面

如果要使用不同的端口,请通过 -p 标志以及端口号,如下所示:

$ rails server -b 0.0.0.0 -p 8080

现在,可以从这个 URL 访问 Rails 应用程序: https://ip-address:8080.

3.删除Rails应用

如果您使用了默认数据库 SQLite,您可以通过简单地删除其 app 目录来删除 Rails 应用程序。

$ rm -fr ostechnixapp

如果您使用过 PostgreSQL,首先您需要使用以下命令删除应用程序的相关数据库:

$ rake db:drop

然后删除应用程序目录:

$ rm -fr ostechnixapp

结论

现在您知道如何使用 PostgreSQL 作为数据库创建 Rails 应用程序了。 就像我已经提到的,如果您的应用程序正被大量用户积极使用,您需要使用 PostgreSQL 或 MySQL。 当您希望将来扩展数据库、从删除系统管理数据库时,这也很有用。

相关阅读:

  • 在 Rails 中使用环境变量配置数据库连接