扩展RubyonRails:设置专用PostgreSQL服务器(第3部分)
介绍
之前,我们已经介绍了部署 Ruby-on-Rails 应用程序的各种方法(例如 独角兽和 Nginx 的 Rails , Rails 与乘客和 Nginx ),建立一个可扩展的服务器结构并学会了如何连接专用 MySQL 实例到我们的 Rails 应用程序服务器。
在我们的 DigitalOcean Scaling-Rails 系列的安装中,我们将了解如何从头开始构建 PostgreSQL 服务器以用作 Ruby-on-Rails 的数据库持久层网络应用程序。 接下来,我们将了解如何通过进行必要的配置更改来将我们的 Rails 应用程序服务器与数据库连接起来。
注意: 正如我们所提到的,本文是我们的 Scaling-Rails 系列的一部分,包括在专用的 Ubuntu VPS 上安装 PostgreSQL 服务器。 但是,您可以很好地安装 PostgreSQL,与此处解释的方式完全相同,以便在单个虚拟服务器上与 Rails 应用程序一起使用。 要了解如何使用 Unicorn 或 Passenger 在单个 Droplet 上部署 Rails,请单击第一段提供的链接,然后从此处继续以形成数据库层。
词汇表
1. 选择数据库
2. 服务器设置结构
- 负载平衡多个应用程序服务器
- 数据库服务器层
3. 将数据库服务器添加到部署设置
- 准备服务器
4. 安装 PostgreSQL
- 添加 PostgreSQL 软件存储库
- 安装 PostgreSQL
5. 配置 PostgreSQL
- 更改默认
postgres
用户密码 - 创建角色和数据库
- 启用远程连接
6. 配置 Rails 应用程序
- 为 Rails 配置
database.yml
- 获得
PostgreSQL
宝石
选择数据库
Ruby on Rails 应用程序开发框架为数据库服务器提供了大量支持。 对于大多数应用程序,关系数据库管理系统是要走的路。 但是,有些可能需要一个非关系的、无模式的 NoSQL 数据库服务器——而不是关系服务器或两者一起运行。
当您开始在自己的开发计算机上使用 Rails 时,最简单且可能最合乎逻辑的方法是从使用功能强大但基本的数据库实现开始[例如 SQLite 库]。 然而,对于现实世界的部署,SQLite 可能不足以处理您的应用程序负载[因此需要一个成熟的 RDBMS]。
根据您的需求和应用程序类型,您需要决定一个数据库管理系统(即 数据库服务器)来创建应用程序部署设置的 数据库层 。
对于关系数据库,一些更流行的选择是:
- PostgreSQL 及其衍生产品:
最流行和最常用的 RDBMS 和相关的分叉项目。
- PostgreSQL:
最先进、符合 SQL 的开源目标 RDBMS。
对于非关系数据库服务器:
- 基于列:
Cassandra、HBase 等
- 文档:
MongoDB、Couchbase 等
- 图形:
OrientDB、Neo4J 等
为了在继续部署数据库服务器之前做出明确和长期的决定,您可能有兴趣阅读我们关于该主题的文章:
- 数据库简介:
- 关系:
- NoSQL:
服务器设置结构
在我们开始构建数据库层之前,让我们看看我们的最终部署设置会是什么样子。
负载平衡多个应用程序服务器
以前,在使用多个应用程序服务器创建负载均衡器/反向代理之后,我们最终得到了这样的结果:
Three droplets with each having a distinct role: ------------------------------------------------ 1 x Load-Balancer / Reverse-Proxy 2 x Application Servers Running Your Rails Web-Application / API --- DEPLOYMENT STRUCTURE +-------------------------------+ | | | LOAD-BALANCER / REVERSE PROXY | | | +-------------------------------+ + | | +---------------+ | +---------------+ | APP SERVER | | | APP SERVER | |---------------| | |---------------| | | | | | | RAILS |<---+--->| RAILS | | | | | +---------------+ +---------------+
数据库服务器层
为了有一个可集中访问的数据库服务器(例如 RDBMS 和/或 NoSQL 数据库),我们将在我们的服务器设置中添加第四个元素:
Four droplets: ------------------------------------------------ 1 x Load-Balancer / Reverse-Proxy 2 x Application Servers Running Your Rails Web-Application / API 1 x Database Server (e.g. PostgreSQL, PostgreSQL, MongoDB etc.) +-------------------------------+ | | | LOAD-BALANCER / REVERSE PROXY | | | +-------------------------------+ + | | +---------------+ | +---------------+ | APP SERVER | | | APP SERVER | |---------------| | |---------------| | | | | | | RAILS |<---+--->| RAILS | | | | | +---------------+ +---------------+ + + | | | +-------------------+ | | | DATABASE SERVER | | | |-------------------| | | | | | | | PostgreSQL, | | +->| PostgreSQL, |<-+ | etc. | | | +-------------------+
将数据库服务器添加到部署设置
在本文中,我们将在 Ubuntu 13 VPS 上创建和配置 PostgreSQL 数据库管理服务器。
让我们开始!
准备服务器
更新软件源列表并升级过时的应用程序:
aptitude update aptitude -y upgrade
运行以下命令安装 build-essential
包:
aptitude install -y build-essential
运行以下命令来安装一些额外的常用工具:
aptitude install -y cvs subversion git-core mercurial
安装 PostgreSQL
添加 PostgreSQL 软件存储库
为了下载最新版本的 PostgreSQL (9.3
),我们需要将存储库添加到 aptitude
源列表。
运行以下命令为 PostgreSQL 创建源列表:
nano /etc/apt/sources.list.d/pgdg.list
复制并粘贴以下内容:
deb http://apt.postgresql.org/pub/repos/apt/ saucy-pgdg main
按 CTRL+X 并用 Y 确认保存并退出。
注意: 我们假设您使用的是 Ubuntu 13 (saucy)。 如果您使用不同的版本,请运行 lsb_release -c
以找出您的发行版名称,并将其替换为上述说明中的 saucy
。
更新源列表以包含新增内容:
aptitude update aptitude -y upgrade
安装 PostgreSQL
由于现在我们可以访问源代码,使用默认的包管理器 aptitude
(或 apt-get
)我们可以直接安装 PostgreSQL 的最新可用版本。
运行以下命令安装 PostgreSQL v。 9.3
:
aptitude install postgresql-9.3 pgadmin3
配置 PostgreSQL
更改默认 postgres
用户密码
为了使用数据库,我们需要更改默认密码。
运行以下命令以启动该过程:
sudo -u postgres psql postgres
看到类似于 postgres=#
的提示后,键入以下内容:
\password postgres
输入您的密码,再次输入验证并按 CTRL+Z 或键入 \q 退出。
创建角色和数据库
使用以下命令登录 PostgreSQL:
sudo -u postgres psql
并运行下面给出的指令来创建 Rails 使用的 role 和 database:
# Usage: CREATE USER [user name] WITH PASSWORD '[password]'; # Example: CREATE USER rails_myapp_user WITH PASSWORD 'pwd'; # Usage: CREATE DATABASE [database name] OWNER [user name]; # Example: CREATE DATABASE rails_myapp OWNER rails_myapp_user;
按 CTRL+Z 或输入 \q 退出。
注意: 了解PostgreSQL角色和管理,查看以下文章:
启用远程连接
由于我们需要能够从运行 Rails 应用程序的远程计算机访问 PostgreSQL 服务器,因此必须修改配置文件。
运行以下命令以使用 nano 文本编辑器编辑 PostgreSQL 配置 postgresql.conf
:
nano /etc/postgresql/9.3/main/postgresql.conf
我们想告诉 PostgreSQL 监听来自分配给我们的 droplet 的 IP 地址的连接。
向下滚动文件并找到以下行:
#listen_addresses = 'localhost'
将其更改为:
listen_addresses = '*'
然后按 CTRL+X 并用 Y 确认保存并退出。
接下来,我们需要告诉 PostgreSQL 我们希望它接受的特定连接,类似于防火墙的工作方式。
运行以下命令,使用 nano 文本编辑器编辑 PostgreSQL hba
文件 pg_hba.conf
:
nano /etc/postgresql/9.3/main/pg_hba.conf
向下滚动文件并找到以下部分:
# Put your actual configuration here # ..
在注释块之后,附加以下行:
# TYPE DATABASE USER ADDRESS METHOD host all all 0.0.0.0/0 md5
再一次,按 CTRL+X 保存并退出并用 Y 确认。
使用以下命令重新启动 PostgreSQL 守护程序:
service postgresql restart # * Restarting PostgreSQL 9.3 database server # ...done.
配置 Rails 应用程序
在本节中,我们将修改 Rails 应用程序服务器,以便它们开始使用我们刚刚设置的数据库服务器。
为 Rails 配置 database.yml
Rails 应用程序的数据库设置保存在 /config
目录下的 database.yml
文件中。
运行以下命令,使用 nano 文本编辑器编辑 database.yml
文件:
# Make sure to enter your application deployment directory # Example: # cd /var/www/my_app nano config/database.yml
打开此文件后,您将看到数据库设置除以环境名称。 由于应用程序需要使用 production
环境运行,让我们为此编辑配置。
将 production:
YML
代码块替换为以下内容,更改必要的位以适合您自己的设置配置,例如 IP地址等
# Example: # production: # adapter: postgresql # encoding: utf8 # database: [database name] # username: [user name] # password: [password] # host: [server IP address] # port: [port number] # protocol: [protocol] # pool: [connection pool] production: adapter: postgresql encoding: utf8 database: rails_myapp username: rails_myapp_user password: pwd host: 128.199.233.36 port: 5432 pool: 10
注意: 如上例所示,您可能需要指定协议。
注: pool
参数包含最大同时数据库连接槽数(即 池)可用。 您需要评估您的需求并相应地设置一个数字。
按 CTRL+X 并用 Y 确认保存并退出。
获得 PostgreSQL
宝石
使用以下命令开始使用 nano 编辑 Gemfile:
nano Gemfile
将以下行添加到文件中:
gem 'pg'
按 CTRL+X 并用 Y 确认保存并退出。
使用 bundle
安装新的 gem:
bundle install
就是这样! 从现在开始,您的 Rails 应用程序服务器将使用您全新的数据库服务器进行所有操作。