序章

Ruby on Rails Webフレームワークを使用する場合、アプリケーションはデフォルトでSQLiteをデータベースとして使用するように設定されています。 SQLiteは、軽量で移植性があり、ユーザーフレンドリーなリレーショナルデータベースであり、メモリの少ない環境で特に優れたパフォーマンスを発揮し、多くの場合にうまく機能します。 ただし、より信頼性の高いデータ整合性とプログラムによる拡張性を必要とする非常に複雑なアプリケーションの場合、PostgreSQLデータベースがより堅牢で柔軟な選択肢になります。 PostgreSQLを使用するようにRubyonRailsセットアップを構成するには、RubyonRailsを起動して実行するためにいくつかの追加手順を実行する必要があります。

このチュートリアルでは、Ubuntu18.04サーバー上のPostgreSQLデータベースに接続されたRubyonRails開発環境をセットアップします。 PostgreSQLをインストールして構成し、データベースサーバーとしてPostgreSQLを使用するRailsアプリケーションを作成してセットアップをテストします。

前提条件

このチュートリアルには、次のものが必要です。

  • Ubuntu 18.04初期サーバーセットアップガイドに従ってセットアップされたUbuntu18.04サーバー。これには、sudo権限を持つroot以外のユーザーとファイアウォールが含まれます。

  • Ubuntu18.04サーバーにインストールされたRubyonRails開発環境。 これを設定するには、 Ubuntu18.04でrbenvを使用してRubyonRailsをインストールする方法に関するガイドに従ってください。 このチュートリアルでは、Rubyのバージョン2.6.3とRailsの5.2.3を使用します。 最新バージョンについては、RubyおよびRailsの公式サイトをご覧ください。

ステップ1-PostgreSQLのインストール

PostgreSQLをデータベースとして使用してWebアプリケーションを作成するようにRubyonRailsを構成するには、最初にデータベースをサーバーにインストールします。

sudo権限を使用して、APTパッケージインデックスを更新し、リポジトリが最新であることを確認します。

  1. sudo apt update

次に、PostgreSQLとその開発ライブラリをインストールします。

  1. sudo apt install postgresql postgresql-contrib libpq-dev

前のコマンドでは、postgresqlパッケージがメインのPostgreSQLプログラムを保持し、postgresql-contribがその機能を拡張するいくつかのPostgreSQL機能を追加します。 libpq-devは、クライアントがバックエンドサーバーからクエリを送信したり応答を受信したりできるようにするPostgreSQLライブラリです。これにより、アプリケーションがデータベースと通信できるようになります。

PostgreSQLとその依存関係がインストールされたら、次のステップは、Railsアプリケーションが後でデータベースを作成するために使用する役割を作成することです。

ステップ2–新しいデータベースロールの作成

PostgreSQLでは、 roles をLinuxのユーザーと同じように使用して、権限と承認を整理できます。 このステップでは、Linuxユーザー名の新しいスーパーユーザーロールを作成する方法を示します。これにより、PostgreSQLシステム内で操作してデータベースを作成および構成できます。

PostgreSQLスーパーユーザーロールを作成するには、次のコマンドを使用して、強調表示された単語をUbuntu18.04ユーザー名に置き換えます。

  1. sudo -u postgres createuser -s sammy -P

-Pフラグを指定したため、新しい役割のパスワードを入力するように求められます。 必要なパスワードを入力し、将来のステップで構成ファイルで使用できるように、必ず記録してください。

このコマンドでは、createuserを使用して、sammyという名前のロールを作成しました。 -sはこのユーザーにスーパーユーザー権限を与え、sudo -uは、PostgreSQLのインストール時に自動的に作成されるpostgresアカウントからコマンドを実行できるようにしました。

注: Ubuntu18.04でのPostgreSQLの認証モードはidentで始まるため、デフォルトでは、Ubuntuユーザーは同じ名前のロールを持つPostgreSQLでのみ操作できます。 詳細については、認証に関するPostgreSQLの公式ドキュメントを確認してください。

-Pフラグを使用せず、作成後にロールのパスワードを設定する場合は、次のコマンドを使用してPostgreSQLコンソールに入ります。

  1. sudo -u postgres psql

PostgreSQLコンソールのプロンプトとともに、次の出力が表示されます。

Output
psql (10.9 (Ubuntu 10.9-0ubuntu0.18.04.1)) Type "help" for help. postgres=#

PostgreSQLコンソールは、postgres=#プロンプトで示されます。 PostgreSQLプロンプトで、次のコマンドを入力して、新しいデータベースロールのパスワードを設定し、強調表示された名前を作成した名前に置き換えます。

  1. \password sammy

PostgreSQLはパスワードの入力を求めます。 プロンプトで目的のパスワードを入力し、確認します。

次に、次のコマンドを入力してPostgreSQLコンソールを終了します。

  1. \q

通常のプロンプトが再び表示されます。

このステップでは、スーパーユーザー権限を持つ新しいPostgreSQLロールを作成しました。 これで、この役割を使用してデータベースを作成する新しいRailsアプリを作成する準備が整いました。

ステップ3–新しいRailsアプリケーションを作成する

PostgreSQL用に構成されたロールを使用して、PostgreSQLをデータベースとして使用するように設定された新しいRailsアプリケーションを作成できるようになりました。

まず、ホームディレクトリに移動します。

  1. cd ~

このディレクトリに新しいRailsアプリケーションを作成し、appnameをアプリと呼びたいものに置き換えます。

  1. rails new appname -d=postgresql

-d=postgresqlオプションは、PostgreSQLをデータベースとして設定します。

このコマンドを実行すると、appnameという名前の新しいフォルダーがホームディレクトリに表示され、基本的なRailsアプリケーションのすべての要素が含まれます。

次に、アプリケーションのディレクトリに移動します。

  1. cd appname

新しいRailsアプリケーションを作成し、プロジェクトのルートディレクトリに移動したので、Railsアプリ内からPostgreSQLデータベースを構成および作成できます。

ステップ4–データベースの構成と作成

アプリケーション用にdevelopmentおよびtestデータベースを作成する場合、RailsはUbuntuユーザー名用に作成したPostgreSQLロールを使用します。 Railsがこれらのデータベースを確実に作成するために、プロジェクトのデータベース構成ファイルを変更します。 次に、データベースを作成します。

Railsアプリケーションで行う構成変更の1つは、最後の手順で作成したPostgreSQLロールのパスワードを追加することです。 パスワードなどの機密情報を安全に保つために、構成ファイルに直接書き込むのではなく、これを環境変数に保存することをお勧めします。

ログイン時に環境変数にパスワードを保存するには、次のコマンドを実行し、APPNAMEをアプリの名前に置き換え、PostgreSQL_Role_Passwordを前の手順で作成したパスワードに置き換えます。

  1. echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc

このコマンドは、exportコマンドを~/.bashrcファイルに書き込み、ログイン時に環境変数が設定されるようにします。

現在のセッションの変数をエクスポートするには、sourceコマンドを使用します。

  1. source ~/.bashrc

ご使用の環境にパスワードを保存したので、構成ファイルを変更します。

お好みのテキストエディタでアプリケーションのデータベース構成ファイルを開きます。 このチュートリアルでは、nanoを使用します。

  1. nano config/database.yml

defaultセクションで、pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>という行を見つけ、次の強調表示された行を追加して、資格情報と作成した環境変数を入力します。 次のようになります。

config / 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: sammy
  password: <%= ENV['APPNAME_DATABASE_PASSWORD'] %>

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

これにより、Railsアプリケーションは正しい役割とパスワードでデータベースを実行します。 CTRL + xYENTERの順に押して、保存して終了します。

Railsでのデータベースの構成の詳細については、Railsのドキュメントを参照してください。

config/database.ymlに変更を加えたので、railsコマンドを使用してアプリケーションのデータベースを作成します。

  1. rails db:create

Railsがデータベースを作成すると、次の出力が表示されます。

Output
Created database 'appname_development' Created database 'appname_test'

出力が示すように、このコマンドはPostgreSQLサーバーにdevelopmentおよびtestデータベースを作成しました。

これで、Railsアプリに接続されたPostgreSQLデータベースができました。 アプリケーションが機能していることを確認するための次のステップは、構成をテストすることです。

ステップ5–構成のテスト

アプリケーションがPostgreSQLデータベースを使用できることをテストするには、Webアプリケーションを実行してブラウザに表示されるようにします。

rails serverコマンドを使用して、Railsアプリの組み込みWebサーバーPumaでWebアプリケーションを実行します。

  1. rails server --binding=127.0.0.1

--bindingは、アプリケーションを指定されたIPにバインドします。 デフォルトでは、このフラグはRailsを0.0.0.0にバインドしますが、これはRailsがすべてのインターフェイスをリッスンすることを意味するため、127.0.0.1を使用してlocalhostを指定する方が安全です。 デフォルトでは、アプリケーションはポート3000でリッスンします。

Railsアプリが実行されると、コマンドプロンプトが消え、次の出力に置き換えられます。

Output
=> 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にリクエストを送信します。

  1. curl http://127.0.0.1:3000

HTMLで多くの出力を受け取り、次のようになります。

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

Railsアプリケーションがリモートサーバー上にあり、Webブラウザーを介してアクセスしたい場合、簡単な方法は、サーバーのパブリックIPアドレスにバインドすることです。 まず、ファイアウォールでポート3000を開きます。

  1. sudo ufw allow 3000

次に、サーバーのパブリックIPアドレスを検索します。 これを行うには、次のcurlコマンドを実行します。

  1. curl http://icanhazip.com

これにより、パブリックIPアドレスが返されます。 rails serverコマンドで使用し、server_public_IPをサーバーのパブリックIPに置き換えます。

  1. rails server --binding=server_public_IP

これで、次のサイトにアクセスして、ポート3000のサーバーのパブリックIPアドレスを介して、ローカルWebブラウザーでRailsアプリケーションにアクセスできるようになります。

http://server_public_IP:3000

このURLには、RubyonRailsのウェルカムページがあります。

Ruby on Rails Welcome Page

これは、アプリケーションが適切に構成され、PostgreSQLデータベースに接続されていることを意味します。

構成をテストした後、ポート3000を閉じる場合は、次のコマンドを使用します。

  1. sudo ufw delete allow 3000

結論

このチュートリアルでは、Ubuntu18.04サーバー上のデータベースとしてPostgreSQLを使用するように構成されたRubyonRailsWebアプリケーションを作成しました。 Rubyプログラミング言語について詳しく知りたい場合は、Rubyシリーズのコーディング方法をご覧ください。

アプリケーション用のデータベースの選択の詳細については、 SQLite、PostgreSQL、およびMySQLの違いとユースケースに関するチュートリアルを確認してください。 データベースの使用方法について詳しく知りたい場合は、 PostgreSQLでのクエリの概要の記事を参照するか、DigitalOceanの管理対象データベース製品を参照してください。