介绍
使用 Ruby on Rails Web 框架时,您的应用程序默认设置为使用 SQLite 作为数据库。 SQLite 是一个轻量级、便携式和用户友好的关系数据库,在低内存环境中表现特别好,并且在许多情况下会很好地工作。然而,对于需要更可靠的数据完整性和编程可扩展性的高度复杂的应用程序,一个 PostgreSQL 数据库将是一个更强大和灵活的选择。
在本教程中,您将设置一个 Ruby on Rails 开发环境连接到 Ubuntu 18.04 服务器上的 PostgreSQL 数据库. 您将安装和配置 PostgreSQL,然后通过创建一个使用 PostgreSQL 作为其数据库服务器的 Rails 应用程序来测试您的设置。
前提条件
此教程需要以下内容:
- 一个 Ubuntu 18.04 服务器是按照 Ubuntu 18.04 初始服务器设置指南设置的,包括具有 sudo 特权和防火墙的非根用户
- 一个 Ruby on Rails 开发环境是安装在 Ubuntu 18.04 服务器上。 要设置此功能,请遵循我们在 Ubuntu 18.04 上的如何安装 Ruby on Rails with rbenv上的指南。 此教程将使用 Ruby 2.6.3 和 Rails 5.2.3 的版本; 有关最新版本的信息,请查看 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
(https://packages.debian.org/jessie/postgresql-contrib-9.4)添加了几个扩展其功能的PostgreSQL功能。
一旦安装了PostgreSQL及其依赖性,下一步是创建一个角色,您的Rails应用程序将在以后使用它来创建您的数据库。
步骤 2 – 创建一个新的数据库角色
在 PostgreSQL 中, roles 可以用与 Linux 中的用户相同的方式来组织权限和授权. 此步骤将向您展示如何为您的 Linux 用户名创建一个新的超级用户角色,这将允许您在 PostgreSQL 系统中运行以创建和配置数据库。
若要创建一个 PostgreSQL 超级用户角色,请使用以下命令,以 Ubuntu 18.04 用户名代替所突出的单词:
1sudo -u postgres createuser -s sammy -P
既然您指定了P
旗,您将被要求为您的新角色输入密码. 输入您想要的密码,确保您将其记录下来,以便您可以在未来的一步中在配置文件中使用。
在这个命令中,你使用了createuser
来创建一个名为sammy
的角色,-s
给了这个用户超级用户权限,而sudo -u
允许你从postgres
帐户中运行该命令,该帐户在安装PostgreSQL时自动创建。
<$>[注]
**注:**由于Ubuntu 18.04上的PostgreSQL的身份验证模式开始为相同
,因此默认情况下,Ubuntu用户只能在PostgreSQL中使用同名角色。
如果您没有使用-P
旗,并且在创建该角色后想要为该角色设置密码,请使用以下命令输入 PostgreSQL 控制台:
1sudo -u postgres psql
您将收到以下输出,以及 PostgreSQL 控制台的提示:
1[secondary_label Output]
2psql (10.9 (Ubuntu 10.9-0ubuntu0.18.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 5.2.3 application starting in development
4=> Run `rails server -h` for more startup options
5Puma starting in single mode...
6* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
7* Min threads: 5, max threads: 5
8* Environment: development
9* Listening on tcp://127.0.0.1:3000
10Use 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> 5.2.3<br />
4 <strong>Ruby version:</strong> 2.6.3 (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 Web 应用程序,该应用程序已配置为在 Ubuntu 18.04 服务器上使用 PostgreSQL 作为数据库。
有关选择您的应用程序的数据库的更多信息,请参阅我们关于 [SQLite, PostgreSQL 和 MySQL] 的差异和使用案例的教程(https://andsky.com/tech/tutorials/sqlite-vs-mysql-vs-postgresql-a-comparison-of-relational-database-management-systems)。