介绍
在使用 Ruby on Rails Web 框架时,您的应用程序将默认使用 SQLite作为数据库。 SQLite 是一个轻量级、便携式和用户友好的关系数据库,在低内存环境中表现特别好,因此在许多情况下它将很好地工作。然而,对于需要更可靠的数据完整性和编程可扩展性的高度复杂的应用程序,PostgreSQL(https://www.postgresql.org/)数据库将是一个更强大和灵活的选择。
在本教程中,您将设置一个 Ruby on Rails 开发环境连接到 Ubuntu 20.04 服务器上的 PostgreSQL 数据库. 您将安装和配置 PostgreSQL,然后通过创建一个使用 PostgreSQL 作为其数据库服务器的 Rails 应用程序来测试您的设置。
前提条件
此教程需要以下内容:
- Ubuntu 20.04 服务器是按照 Ubuntu 20.04 初始服务器设置指南设置的,包括具有 sudo 特权和防火墙的非根用户
- 您 Ubuntu 20.04 服务器上安装了 Ruby on Rails 开发环境。 若要设置此功能,请遵循 Ubuntu 20.04 上的如何安装 Ruby on Rails with rbenv. 本教程将使用 Ruby 3.1.2 和 Rails 7.0.4;有关最新版本的信息,请参阅 Ruby和 Rails的官方网站。
第1步:安装PostgreSQL
要将 Ruby on Rails 配置为您的 Web 应用程序的 PostgreSQL 数据库,您必须先将数据库安装到您的服务器上。
使用sudo
权限,更新您的APT包索引,以确保您的存储库是最新的:
1sudo apt update
接下来,安装 PostgreSQL 及其开发库:
1sudo apt install postgresql postgresql-contrib libpq-dev
在之前的命令中,postgresql
包持有主要的PostgreSQL程序,而postgresql-contrib
添加了几个PostgreSQL功能,扩展了其功能。
一旦安装了PostgreSQL及其依赖性,下一步是创建一个角色,您的Rails应用程序将在以后使用它来创建您的数据库。
步骤 2 – 创建一个新的数据库角色
在 PostgreSQL 中, roles 可以用来组织权限和授权,就像用户在 Linux 中一样. 在此步骤中,您将为您的 Linux 用户名创建一个新的超级用户角色,允许您在 PostgreSQL 系统中创建和配置数据库。
要创建一个 PostgreSQL 超级用户角色,请运行以下命令,以 Ubuntu 20.04 用户名替换突出的单词:
1sudo -u postgres createuser -s sammy -P
既然您指定了P
旗,您将被要求为您的新角色输入密码. 输入您想要的密码,确保您将其记录下来,以便您可以在以后的步骤中在配置文件中使用。
您使用createuser
创建一个名为sammy
的角色(或您最喜欢的用户名)。s
旗赋予这个用户超级用户权限,而sudo -u
允许您从postgres
帐户运行命令,该命令在安装PostgreSQL时自动创建。
<$>[注]
**注:**由于Ubuntu上的PostgreSQL的身份验证模式开始为相同
,因此默认情况下,Ubuntu用户只能在PostgreSQL中使用同名角色。
如果您没有使用-P
旗,并且在创建该角色后想要为该角色设置密码,请使用以下命令输入 PostgreSQL 控制台:
1sudo -u postgres psql
您将收到以下输出,以及 PostgreSQL 控制台的提示:
1[secondary_label Output]
2psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1))
3Type "help" for help.
4
5postgres=#
在 PostgreSQL 提示中,输入此命令以为新数据库角色设置密码,将突出的名称替换为您创建的名称:
1\password sammy
PostgreSQL 将提示您提供密码,然后在提示中输入您想要的密码,然后确认。
现在,通过输入此命令离开 PostgreSQL 控制台:
1\q
你的平常快递现在会再次出现。
在此步骤中,您创建了一个具有超级用户权限的新 PostgreSQL 角色,现在您已经准备好创建一个新的 Rails 应用程序,该角色可用于创建数据库。
步骤 3 – 创建一个新的 Rails 应用程序
有了为 PostgreSQL 配置的角色,您现在可以创建一个新的 Rails 应用程序,该应用程序设置为使用 PostgreSQL 作为数据库。
首先,导航到您的家庭目录:
1cd ~
在此目录中创建一个新的 Rails 应用程序,用任何你想称呼你的应用程序的代替appname
:
1rails new appname -d=postgresql
-d=postgresql
选项将 PostgreSQL 设置为数据库。
一旦运行此命令,一个名为appname
的新文件夹将出现在您的主目录中,其中包含基本 Rails 应用程序的所有元素。
接下来,进入应用程序目录:
1cd appname
现在,您已经创建了一个新的 Rails 应用程序,并迁移到您的项目的根目录中,您可以从 Rails 应用程序中配置和创建您的 PostgreSQL 数据库。
步骤 4 – 配置和创建您的数据库
在为您的应用程序创建开发
和测试
数据库时,Rails 将使用您为您的 Ubuntu 用户名创建的 PostgreSQL 角色。为了确保 Rails 创建这些数据库,您将更改您的项目的数据库配置文件。
对于您的 Rails 应用程序进行的配置更改之一是添加在最后一步创建的 PostgreSQL 角色的密码. 为了保持密码等敏感信息的安全性,建议将密码存储在环境变量中,而不是直接在配置文件中写入。
若要将密码存储在登录时可变的环境中,请执行以下命令,将APPNAME
取代您的应用程序名称和PostgreSQL_Role_Password
取代您在最后一步创建的密码:
1echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc
此命令将导出
命令写入您的~/.bashrc
文件,以便设置环境变量在登录时。
要导出当前会话的变量,请使用源
命令:
1source ~/.bashrc
现在您已将密码存储在您的环境中,您可以更改配置文件。
在您喜爱的文本编辑器中打开应用程序的数据库配置文件,本教程将使用nano
:
1nano config/database.yml
在默认
部分中,找到说池: <%= ENV.fetch(
RAILS_MAX_THREADS) { 5 } %>
的行,并添加以下突出的行,填写您的身份证和您创建的环境变量。
1[label config/database.yml]
2...
3default: &default
4 adapter: postgresql
5 encoding: unicode
6 # For details on connection pooling, see Rails configuration guide
7 # http://guides.rubyonrails.org/configuring.html#database-pooling
8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
9 username: sammy
10 password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>
11
12development:
13 <<: *default
14 database: appname_development
15...
此更新将使 Rails 应用程序以正确的角色和密码运行数据库. 通过按CTRL
+x
,Y
,然后按ENTER
来保存和退出。
有关 Rails 中的数据库配置的更多信息,请参阅 Rails 文档。
现在你已经更改了config/database.yml
,使用rails
命令来创建应用程序的数据库:
1rails db:create
一旦 Rails 创建数据库,您将收到以下输出:
1[secondary_label Output]
2Created database 'appname_development'
3Created database 'appname_test'
正如输出所示,此命令在您的 PostgreSQL 服务器中创建了一个开发
和测试
数据库。
您现在有一个 PostgreSQL 数据库连接到您的 Rails 应用程序. 为了确保您的应用程序工作,您现在将测试您的配置。
步骤5 - 测试您的配置
要测试您的应用程序是否能够使用 PostgreSQL 数据库,您将运行您的 Web 应用程序,以便在浏览器中显示。
使用rails server
命令,在您的 Rails 应用程序中的内置 Web 服务器上运行您的 Web 应用程序, Puma:
1rails server --binding=127.0.0.1
默认情况下,这个标志将 Rails 绑定到 0.0.0.0
,这意味着 Rails 将倾听所有接口,所以使用127.0.0.1
来指定本地主机
更安全。
一旦您的 Rails 应用程序运行,您的命令提示将消失,取代此输出:
1[secondary_label Output]
2=> Booting Puma
3=> Rails 7.0.4 application starting in development
4=> Run `bin/rails server --help` for more startup options
5Puma starting in single mode...
6* Puma Version 5.6.5 (ruby 3.1.2-p20) ("Birdie's Version")
7* Min threads: 5
8* Max threads: 5
9* Environment: development
10* Listening on tcp://127.0.0.1:3000
11Use Ctrl-C to stop
要测试您的应用程序是否正在运行,请在服务器上打开一个新的终端窗口,并使用弯曲
命令将请求发送到127.0.0.1:3000
:
1curl http://127.0.0.1:3000
您将收到大量的HTML输出,以以下方式结束:
1[secondary_label Output]
2...
3 <strong>Rails version:</strong> 7.0.4<br />
4 <strong>Ruby version:</strong> 3.1.2 (x86_64-linux)
5 </p>
6 </section>
7 </div>
8</body>
9</html>
如果您的 Rails 应用程序位于远程服务器上,您希望通过 Web 浏览器访问它,您可以将其绑定到您的服务器的公共 IP 地址。
1sudo ufw allow 3000
接下来,搜索您的服务器的公共IP地址,您可以通过运行下面的‘curl’命令来做到这一点:
1curl http://icanhazip.com
使用rails server
命令,以您的服务器的公共IP代替server_public_IP
:
1rails server --binding=server_public_IP
现在,您将能够通过访问3000
端口上的服务器的公共IP地址在本地网页浏览器中访问您的Rails应用程序:
1http://server_public_IP:3000
在这个URL上,你会找到一个Ruby on Rails页面:
如果您可以访问主页,您的应用程序将正确配置并连接到 PostgreSQL 数据库。
测试配置后,如果要关闭端口3000
,请使用以下命令。
1sudo ufw delete allow 3000
结论
在本教程中,您创建了一个 Ruby on Rails 网页应用程序,将其配置为在 Ubuntu 20.04 服务器上使用 PostgreSQL 作为数据库。
有关选择应用程序的数据库的更多信息,请参阅我们关于 [SQLite, PostgreSQL 和 MySQL] 的差异和使用案例的教程(https://andsky.com/tech/tutorials/sqlite-vs-mysql-vs-postgresql-a-comparison-of-relational-database-management-systems)。