介绍
使用 Ruby on Rails Web 框架时,您的应用程序默认设置为使用 SQLite 作为数据库。 SQLite 是一个轻量级、便携式和用户友好的关系数据库,在低内存环境中表现特别好,并且在许多情况下会很好地工作。然而,对于需要更可靠的数据完整性和编程可扩展性的高度复杂的应用程序,一个 PostgreSQL 数据库将是一个更强大和灵活的选择。
在本教程中,您将设置一个 Ruby on Rails 开发环境连接到本地 macOS 机器上的 PostgreSQL 数据库. 您将安装和配置 PostgreSQL,然后通过创建一个使用 PostgreSQL 作为其数据库服务器的 Rails 应用程序来测试您的设置。
前提条件
此教程需要以下内容:
- 安装了 macOS 的 1 台计算机或虚拟机,与该机器的管理访问和互联网连接. 本教程已在 macOS 10.14 Mojave上测试。
- 在 macOS 机器上安装了 Ruby on Rails 开发环境. 要设置此功能,请遵循我们在 如何在 macOS 上安装 Ruby on Rails with rbenv上的指南。
第1步:安装PostgreSQL
为了配置 Ruby on Rails 以创建您的 Web 应用程序以 PostgreSQL 作为数据库,您将首先在您的计算机上安装该数据库. 虽然在 macOS 上安装 PostgreSQL 的方法有很多(https://www.postgresql.org/download/macosx/),但本教程将使用包管理器 Homebrew。
有多个 Homebrew 包来安装不同版本的 PostgreSQL. 要安装最新版本,请运行以下命令:
1brew install postgresql
如果您想下载特定版本的 PostgreSQL,请在上一个命令中代替postgresql
以您想要的包。
接下来,将 PostgreSQL 二进制包含在您的PATH
变量中,以便访问 PostgreSQL 命令行工具,确保用您正在使用的版本号取代10
:
1echo 'export PATH="/usr/local/opt/postgresql@10/bin:$PATH"' >> ~/.bash_profile
然后,将您对您的 ~/.bash_profile
文件所做的更改应用到当前的壳会话中:
1source ~/.bash_profile
要启动该服务并允许它在登录时启动,请执行以下操作:
1brew services start postgresql@10
检查,以确保安装成功:
1postgres -V
你会得到以下的输出:
1[secondary_label Output]
2postgres (PostgreSQL) 10.9
一旦安装了PostgreSQL,下一步是创建一个角色,您的Rails应用程序将在以后使用它来创建您的数据库。
步骤 2:为您的应用程序创建数据库角色
在 PostgreSQL 中,可使用 roles 来组织权限和授权。在使用 Homebrew 启动 PostgreSQL 时,您将自动使用 macOS 用户名创建一个超级用户角色。
若要创建新角色,请运行以下命令,将appname
替换为您想要给该角色的任何名称:
1createuser -P -d appname
在此命令中,您使用createuser
创建了一个名为appname
的角色. -d
旗赋予该角色创建新数据库的权限。
您还指定了P
旗,这意味着您将被要求为您的新角色输入密码。
如果您没有使用-P
旗,并且在创建该角色后想要为该角色设置密码,请使用以下命令输入 PostgreSQL 控制台:
1psql postgres
您将收到以下输出,以及 PostgreSQL 控制台的提示:
1[secondary_label Output]
2psql (10.9)
3Type "help" for help.
4
5postgres=#
在 PostgreSQL 提示中,输入此命令以为新数据库角色设置密码,将突出的名称替换为您创建的名称:
1\password appname
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 将使用您在步骤 2 中创建的 PostgreSQL 角色,以确保 Rails 创建这些数据库,您将更改项目的数据库配置文件。
在您的 Rails 应用程序中进行的配置更改之一是为您在最后一步中创建的 PostgreSQL 角色添加密码. 为了保持密码等敏感信息的安全,最好将其存储在环境变量中,而不是直接在配置文件中写入。
若要将密码存储在登录时可变的环境中,请执行以下命令,将APPNAME
取代您的应用程序名称和PostgreSQL_Role_Password
取代您在最后一步创建的密码:
1echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bash_profile
此命令将导出
命令写入您的~/.bash_profile
文件,以便在登录时设置环境变量。
要导出当前会话的变量,请使用源
命令:
1source ~/.bash_profile
现在你已经在你的环境中存储了密码,是时候更改配置文件了。
在您喜爱的文本编辑器中打开应用程序的数据库配置文件,本教程将使用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: appname
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 的内置 Web 服务器 Puma来服务您的应用程序. 此 Web 服务器将自动配备 Rails,不需要额外的设置。
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-darwin18)
5 </p>
6 </section>
7 </div>
8</body>
9</html>
您也可以通过访问本地网页浏览器访问您的 Rails 应用程序:
1http://127.0.0.1:3000
在这个URL上,你会发现一个Ruby on Rails欢迎页面:
这意味着您的应用程序已正确配置并连接到PostgreSQL数据库。
结论
在本教程中,您创建了一个 Ruby on Rails Web 应用程序,该应用程序已配置为在本地 macOS 机器上使用 PostgreSQL 作为数据库。
有关选择您的应用程序的数据库的更多信息,请参阅我们关于 [SQLite, PostgreSQL 和 MySQL] 的差异和使用案例的教程(https://andsky.com/tech/tutorials/sqlite-vs-mysql-vs-postgresql-a-comparison-of-relational-database-management-systems)。