如何在macOS上使用PostgreSQL和Ruby on Rails应用程序

使用Ruby on Rails Web框架时,PostgreSQL数据库可以成为您应用程序的强大而灵活的选择。在本教程中,您将设置一个Ruby on Rails开发环境,该环境连接到本地macOS机器上的PostgreSQL数据库。您将安装和配置PostgreSQL,然后通过创建使用PostgreSQL作为其数据库服务器的Rails应用程序来测试您的设置。

介绍

使用Ruby on Rails Web框架时,默认情况下会将应用程序设置为使用SQLite作为数据库。 SQLite是一个轻量级,可移植且用户友好的关系数据库,在低内存环境中表现尤为出色,并且在许多情况下都能正常运行。 但是,对于需要更可靠的数据完整性和编程可扩展性的高度复杂的应用程序, PostgreSQL数据库将是一个更强大和灵活的选择。 为了将Ruby on Rails设置配置为使用PostgreSQL,您需要执行一些额外的步骤来启动并运行它。

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

先决条件

本教程需要以下内容:

  • 安装了macOS的一台计算机或虚拟机,具有对该计算机的管理访问权限和Internet连接。 本教程已在macOS 10.14 Mojave上测试过。

  • 在macOS机器上安装了Ruby on Rails开发环境。 要进行此设置,请按照我们的指南, 如何在macOS上使用rbenv安装Ruby on Rails 本教程将使用Ruby的2.6.3版和Rails的5.2.3版; 有关最新版本的信息,请查看RubyRails的官方站点。

第1步 - 安装PostgreSQL

为了配置Ruby on Rails以使用PostgreSQL作为数据库创建Web应用程序,您将首先将数据库安装到您的计算机上。 虽然有很多方法可以在macOS上安装PostgreSQL ,但本教程将使用软件包管理器Homebrew

有多个Homebrew包可以安装不同版本的PostgreSQL。 要安装最新版本,请运行以下命令:

brew install postgresql

如果您想下载特定版本的PostgreSQL,请将上一个命令中的postgresql替换为您想要的包。 您可以在Homebrew网站上找到可用的软件包。

接下来,在PATH变量中包含PostgreSQL二进制文件,以便访问PostgreSQL命令行工具,确保将10替换为您使用的版本号:

echo 'export PATH="/usr/local/opt/postgresql@10/bin:$PATH"' >> ~/.bash_profile

然后,将您对~/.bash_profile文件所做的更改应用于当前的shell会话:

source ~/.bash_profile

要启动该服务并使其在登录时启动,请运行以下命令:

brew services start postgresql@10

检查以确保安装成功:

postgres -V

您将获得以下输出:

postgres (PostgreSQL) 10.9

安装PostgreSQL后,下一步是创建一个Rails应用程序稍后将用于创建数据库的角色。

第2步 - 为应用程序创建数据库角色

在PostgreSQL中, 角色可用于组织权限和授权。 使用Homebrew启动PostgreSQL时,您将自动拥有使用macOS用户名创建的超级用户角色。 为了使这些超级用户权限与您用于Rails应用程序的数据库实例分开,在此步骤中,您将创建一个访问权限较少的新角色。

要创建新角色,请运行以下命令,将appname替换为您要为其提供角色的名称:

createuser -P -d appname

在此命令中,您使用createuser创建名为appname的角色。 -d标志赋予角色创建新数据库的权限。

您还指定了-P标志,这意味着系统将提示您输入新角色的密码。 输入所需的密码,确保将其记录下来,以便在将来的步骤中将其用于配置文件中。

如果您未使用-P标志并希望在创建角色后为其设置密码,请使用以下命令进入PostgreSQL控制台:

psql postgres

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

psql (10.9)
Type "help" for help.

postgres=#

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

\password appname

PostgreSQL会提示您输入密码。 在提示符下输入所需的密码,然后确认。

现在,输入以下命令退出PostgreSQL控制台:

\q

您现在的提示将重新出现。

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

第3步 - 创建新的Rails应用程序

在为PostgreSQL配置角色后,您现在可以创建一个新的Rails应用程序,该应用程序设置为将PostgreSQL用作数据库。

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

cd ~

在此目录中创建一个新的Rails应用程序,将appname替换为您想要调用应用程序的任何内容:

rails new appname -d=postgresql

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

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

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

cd appname

现在您已经创建了一个新的Rails应用程序并且已经移动到项目的根目录中,您可以在Rails应用程序中配置和创建PostgreSQL数据库。

第4步 - 配置和创建数据库

在为应用程序创建developmenttest数据库时,Rails将使用您在第2步中创建的PostgreSQL角色。为确保Rails创建这些数据库,您将更改项目的数据库配置文件。 然后,您将创建数据库。

在Rails应用程序中进行的配置更改之一是添加您在上一步中创建的PostgreSQL角色的密码。 要保持密码等敏感信息的安全,最好将其存储在环境变量中,而不是直接将其写入配置文件中。

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

echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bash_profile

此命令将export命令写入~/.bash_profile文件,以便在登录时设置环境变量。

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

source ~/.bash_profile

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

在首选文本编辑器中打开应用程序的数据库配置文件。 本教程将使用nano

nano config/database.yml

default部分下,找到pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>的行pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>并添加以下突出显示的行,填写您创建的凭据和环境变量。 它应该看起来像这样:

配置/ 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: appname
  password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>

development:
  <<: *default
  database: appname_development
...

这将使Rails应用程序使用正确的角色和密码运行数据库。 CTRL+XY ,然后按ENTER保存并退出。

有关在Rails中配置数据库的更多信息,请参阅Rails文档

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

rails db:create

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

Created database 'appname_development'
Created database 'appname_test'

如输出所示,此命令在PostgreSQL服务器中创建了一个developmenttest数据库。

您现在有一个PostgreSQL数据库连接到您的Rails应用程序。 为确保您的应用程序正常运行,下一步是测试您的配置。

第5步 - 测试您的配置

要测试您的应用程序是否能够使用PostgreSQL数据库,请尝试运行您的Web应用程序,以便它将显示在浏览器中。

首先,您将使用内置的Rails服务器Puma来为您的应用程序提供服务。 此Web服务器自动附带Rails,无需其他设置。 要提供应用程序,请运行以下命令:

rails server --binding=127.0.0.1

--binding将您的应用程序绑定到指定的IP。 默认情况下,此标志将Rails绑定到0.0.0.0 ,但由于这意味着Rails将监听所有接口,因此使用127.0.0.1指定localhost更安全。 默认情况下,应用程序监听端口3000

一旦您的Rails应用程序运行,您的命令提示符将消失,由此输出替换:

=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.6.3-p62), codename: Llamas in Pajamas
* 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发送请求:

curl http://127.0.0.1:3000

您将收到大量HTML输出,结尾如下:

...
        <strong>Rails version:</strong> 5.2.3<br />
        <strong>Ruby version:</strong> 2.6.3 (x86_64-darwin18)
      </p>
    </section>
  </div>
</body>
</html>

您还可以访问以下网址,在本地Web浏览器中访问Rails应用程序:

http://127.0.0.1:3000

在此URL,您将找到Ruby on Rails欢迎页面:

Ruby on Rails欢迎页面

这意味着您的应用程序已正确配置并连接到PostgreSQL数据库。

结论

在本教程中,您创建了一个Ruby on Rails Web应用程序,该应用程序配置为将PostgreSQL用作本地macOS计算机上的数据库。 如果您想了解有关Ruby编程语言的更多信息,请查看Ruby系列中的How To Code

有关为应用程序选择数据库的更多信息,请查看有关SQLite,PostgreSQL和MySQL之间差异和用例的教程。 如果您想了解有关如何使用数据库的更多信息,请参阅PostgreSQL中的查询简介文章,或者探索DigitalOcean的托管数据库产品