序章


これまで、Ruby-on-Railsアプリケーションをデプロイするさまざまな方法について説明してきました(例: UnicornとNginxを搭載したRails 乗客とNginxを備えたレール )、設定スケーラブルなサーバー構造接続する方法を学びました専用のMySQLインスタンス Railsアプリケーションサーバーに。

このDigitalOceanScaling-Rails シリーズのインストールでは、 PostgreSQL サーバーを最初から構築して、Ruby-on-Railsのデータベース永続化レイヤーとして使用する方法を説明します。 Webアプリケーション。 続いて、必要な構成変更を行って、Railsアプリケーションサーバーをデータベースに接続する方法を見ていきます。

注:この記事は、すでに述べたように、Scaling-Railsシリーズの一部であり、専用のUbuntuVPSにPostgreSQLサーバーをインストールすることで構成されています。 ただし、ここで説明したのとまったく同じ方法でPostgreSQLをインストールして、Railsアプリケーションと一緒に単一の仮想サーバーで使用することができます。 UnicornまたはPassengerを使用して単一のドロップレットにRailsをデプロイする方法を確認するには、最初の段落にあるリンクをクリックしてから、ここから続行してデータベースレイヤーを形成してください。

用語集


1. データベースの選択


2. サーバーのセットアップ構造


  1. 複数のアプリケーションサーバーの負荷分散
  2. データベースサーバーレイヤー

3. デプロイメントセットアップへのデータベースサーバーの追加


  1. サーバーの準備

4. PostgreSQLのインストール


  1. PostgreSQLソフトウェアリポジトリの追加
  2. PostgreSQLのインストール

5. PostgreSQLの構成


  1. デフォルトのpostgresユーザーパスワードの変更
  2. ロールとデータベースの作成
  3. リモート接続の有効化

6. Railsアプリケーションの構成


  1. Railsのdatabase.ymlの構成
  2. PostgreSQLジェムの入手

データベースの選択


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.       |
                   |                   |
                   +-------------------+

デプロイメントセットアップへのデータベースサーバーの追加


この記事では、Ubuntu13VPS上に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を直接インストールできます。

次のコマンドを実行してPostgreSQLvをインストールします。 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サーバーにアクセスできるようにする必要があるため、構成ファイルを変更する必要があります。

次のコマンドを実行して、nanoテキストエディターを使用してPostgreSQL構成postgresql.confを編集します。

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

ドロップレットに割り当てられたIPアドレスからの接続をリッスンするようにPostgreSQLに指示します。

ファイルを下にスクロールして、次の行を見つけます。

#listen_addresses = 'localhost'

次のように変更します。

listen_addresses = '*'

そして、CTRL + Xを押してYで確定することにより、保存して終了します。

次に、ファイアウォールの動作と同様に、PostgreSQLに受け入れたい特定の接続を指示する必要があります。

次のコマンドを実行して、nanoテキストエディタを使用してPostgreSQLhbaファイル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アプリケーションサーバーはすべての操作に新しいデータベースサーバーを使用します。

投稿者: https ://twitter.com/ostezer