on Rails的Ruby的扩展:设立专门的PostgreSQL服务器(第三部分)

在此安装我们DigitalOcean缩放-Rails的系列,我们将了解如何从头构建一个PostgreSQL服务器作为数据库持久层的Ruby-on-Rails的Web应用程序使用。继续,我们将看到如何通过必要的配置更改我们的Rails应用服务器与数据库的连接。

介绍


此前,我们已经覆盖部署的Ruby-on-Rails应用程序(如各种方式与Unicorn和Nginx的滑轨与客运及Nginx的滑轨 ),建立一个可扩展的服务器结构,并且学会如何将连接专用的MySQL实例到我们的Rails应用服务器。

在此安装我们DigitalOcean的缩放-Rails的系列,我们要找出如何建立一个PostgreSQL的从头服务器作为数据库持久层的Ruby-on-Rails的Web应用程序使用。 接下来,我们将通过进行必要的配置更改来了解如何将Rails应用程序服务器与数据库连接。

注:本文,正如我们已经提到的,是我们扩大规模的Rails系列的一部分,由一个专门的Ubuntu的VPS安装PostgreSQL服务器。 然而,你可以非常好地安装PostgreSQL,以这里解释完全相同的方式,在一个单一的虚拟服务器与Rails应用程序一起使用。 为了看到如何使用Unicorn或Passenger在单个Droplet上部署Rails,请单击第一个段落中提供的链接,然后从这里继续以形成数据库层。

词汇表


选择数据库


2.服务器设置结构


  1. 负载平衡多个应用程序服务器
  2. 数据库服务器层

3.将数据库服务器添加到部署设置


  1. 准备服务器

4.安装PostgreSQL


  1. 添加PostgreSQL软件库
  2. 安装PostgreSQL

5.配置PostgreSQL


  1. 更改默认postgres用户密码
  2. 创建角色和数据库
  3. 启用远程连接

6.配置Rails应用程序


  1. 配置database.yml钢轨
  2. 获取PostgreSQLGem

选择数据库


Ruby on Rails应用程序开发框架为数据库服务器提供了大量的支持。 对于大多数应用程序,关系数据库管理系统是要走的路。 但是,一些可能需要一个非关系的,无模式的NoSQL数据库服务器 - 而不是关系型数据库服务器或两者一起运行。

当您开始在自己的开发计算机上使用Rails时,最简单也可能是最合理的方法是使用一个有能力但基本的数据库实现[例如SQLite库]。 然而,对于现实世界的部署,机会是SQLite将不足以处理您的应用程序负载[因此需要一个成熟的RDBMS]。

根据您的需求和应用类型,你需要在数据库管理系统(如数据库服务器)决定创建您的应用程序部署建立数据库层

对于关系数据库,一些更流行的选择是:

  • PostgreSQL及其派生:

最流行和常用的RDBMS和相关的,分叉项目。

  • PostgreSQL:

最先进的,SQL兼容和开源的目标RDBMS。

对于非关系数据库服务器:

  • 基于列:

Cassandra,HBase等

  • 文件:

MongoDB,Couchbase等

  • 图形:

OrientDB,Neo4J等

为了在继续部署数据库服务器之前做出明确和长期的决定,您可能有兴趣阅读我们关于此主题的文章:

  • 数据库简介:

了解SQL和NoSQL数据库和不同的数据库模型

  • 关系:

关系数据库管理系统的比较

  • NoSQL:

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数据库),我们将添加一个第4个元素到我们的服务器设置:

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(无礼)的工作。 如果您使用的是不同的版本,运行lsb_release -c找出你的发行版的名字,取而代之的是saucy在上面的说明。

更新源列表以包含新添加项:

aptitude    update
aptitude -y upgrade

安装PostgreSQL


因为现在我们有访问源,使用默认的包管理aptitude (或apt-get ),我们就可以直接安装PostgreSQL的最新版本。

运行以下命令来安装PostgreSQL诉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的使用说明进行操作:

# 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服务器,因此必须修改配置文件。

运行以下命令编辑PostgreSQL的配置postgresql.conf使用纳米文本编辑器:

nano /etc/postgresql/9.3/main/postgresql.conf

我们想告诉PostgreSQL监听来自分配给我们的Droplet的IP地址的连接。

向下滚动文件,找到以下行:

#listen_addresses = 'localhost'

将其更改为:

listen_addresses = '*'

然后按CTRL + X并用Y确认保存并退出。

接下来,我们需要告诉PostgreSQL我们希望它接受的具体连接,类似于防火墙的工作原理。

运行以下命令来编辑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应用程序服务器,以便他们开始使用我们刚刚设置的数据库服务器。

配置database.yml钢轨


对于Rails应用程序数据库设置都保存在里面database.yml文件/config目录。

运行以下命令来编辑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确认保存并退出。

获取PostgreSQLGem


使用nano使用以下命令开始编辑Gemfile:

nano Gemfile

将以下行添加到文件:

gem 'pg'

按CTRL + X并用Y确认保存并退出。

安装使用新的Gembundle

bundle install

就这样! 从现在开始,您的Rails应用程序服务器将为所有操作使用您的全新数据库服务器。

:提交OS Tezer