Ubuntu 20.04でRuby on RailsアプリケーションとPostgreSQLを使用する方法

はじめに

Ruby on Railsウェブフレームワークを使用する際、デフォルトではアプリケーションはSQLiteをデータベースとして使用します。SQLiteは軽量で携帯性があり、低メモリ環境で特に優れたパフォーマンスを発揮するため、多くの場合に適しています。ただし、より信頼性の高いデータの整合性とプログラム的な拡張性が必要な複雑なアプリケーションには、PostgreSQLデータベースがより堅牢で柔軟な選択肢となります。Ruby on Railsのセットアップを設定してPostgreSQLを使用するためには、追加の手順が必要です。

このチュートリアルでは、Ubuntu 20.04サーバーに接続されたRuby on Rails開発環境を設定します。PostgreSQLをインストールおよび設定し、その後、PostgreSQLをデータベースサーバーとして使用するRailsアプリケーションを作成してセットアップをテストします。

前提条件

このチュートリアルには以下が必要です:

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

WebアプリケーションのデータベースとしてPostgreSQLを使用するために、まずデータベースをサーバーにインストールします。

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 では、ロールは Linux のユーザーと同様に権限と認可を整理するために使用できます。このステップでは、PostgreSQL システム内でデータベースを作成および設定するために使用できる新しいスーパーユーザーロールを Linux のユーザー名に作成します。

PostgreSQL のスーパーユーザーロールを作成するには、次のコマンドを実行します。ハイライトされた単語を Ubuntu 20.04 のユーザー名に置き換えてください。

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

-P フラグが指定されているため、新しいロールのパスワードを入力するように求められます。所望のパスワードを入力し、後のステップで構成ファイルで使用できるように記録してください。

createuserコマンドを使用して、sammyという名前のロールを作成します(またはお好きなユーザー名を使用してください)。-sフラグはこのユーザーにスーパーユーザー権限を付与し、sudo -uはPostgreSQLのインストール時に自動的に作成されるpostgresアカウントからコマンドを実行するためのものです。

注意: Ubuntu上のPostgreSQLの認証モードはデフォルトでidentに設定されているため、Ubuntuユーザーはデフォルトで同じ名前のロールでのみPostgreSQLで操作することができます。詳細については、PostgreSQL公式ドキュメントの認証に関する情報を参照してください。

-Pフラグを使用せずに作成したロールのパスワードを設定したい場合は、次のコマンドでPostgreSQLコンソールに入ることができます:

  1. sudo -u postgres psql

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

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

PostgreSQLコンソールはpostgres=#プロンプトで示されます。PostgreSQLのプロンプトで、以下のコマンドを入力して、新しいデータベースロールのパスワードを設定します。ハイライトされている名前を作成した名前に置き換えてください:

  1. \password sammy

PostgreSQLはパスワードを入力するようにプロンプトを表示します。希望するパスワードをプロンプトに入力し、確認してください。

これで、PostgreSQLコンソールから出るためのコマンドを入力します:

  1. \q

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

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

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

PostgreSQLに設定された役割を使用する新しいRailsアプリケーションを作成できます。

まず、ホームディレクトリに移動してください:

  1. cd ~

次に、次のコマンドを使用して新しいRailsアプリケーションを作成します。 appnameをアプリの名前に置き換えてください:

  1. rails new appname -d=postgresql

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

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

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

  1. cd appname

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

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

アプリケーションの developmenttest データベースを作成する際、Rails は Ubuntu のユーザー名に作成した PostgreSQL ロールを使用します。これらのデータベースを作成するためには、プロジェクトのデータベース設定ファイルを変更する必要があります。その後、データベースを作成します。

Rails アプリケーションの設定変更の一つは、前の手順で作成した 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
  # 接続プーリングの詳細については、Railsの設定ガイドを参照してください。
  # 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サーバーにdevelopmenttestのデータベースを作成しました。

これでRailsアプリに接続されたPostgreSQLデータベースがあります。アプリケーションが正常に動作していることを確認するために、設定をテストします。

ステップ5 – 設定のテスト

アプリケーションがPostgreSQLデータベースを使用できるかどうかをテストするために、ウェブアプリケーションを実行してブラウザに表示します。

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

  1. rails server --binding=127.0.0.1

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

Railsアプリが実行されていると、コマンドプロンプトは消え、次のような出力に置き換わります:

Output
=> Booting Puma => Rails 7.0.4 application starting in development => Run `bin/rails server --help` for more startup options Puma starting in single mode... * Puma Version 5.6.5 (ruby 3.1.2-p20) ("Birdie's Version") * 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> 7.0.4<br /> <strong>Ruby version:</strong> 3.1.2 (x86_64-linux) </p> </section> </div> </body> </html>

Railsアプリケーションがリモートサーバー上にあり、ウェブブラウザを介してアクセスしたい場合は、サーバーのパブリック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

これで、ローカルのウェブブラウザからサーバーのパブリックIPアドレスのポート3000でRailsアプリケーションにアクセスできるようになります。アクセスするURLは次のようになります:

http://server_public_IP:3000

このURLでは、Ruby on Railsのページが表示されます:

ホームページにアクセスできれば、アプリケーションは正しく設定され、PostgreSQLデータベースに接続されています。

設定をテストした後、ポート3000を閉じる場合は、次のコマンドを使用してください。

  1. sudo ufw delete allow 3000

結論

このチュートリアルでは、Ubuntu 20.04サーバー上でデータベースとしてPostgreSQLを使用するように構成されたRuby on Railsウェブアプリケーションを作成しました。Rubyプログラミング言語について詳しく知りたい場合は、How To Code in Rubyシリーズをご覧ください。

アプリケーションに適したデータベースの選択に関する詳細は、SQLite、PostgreSQL、およびMySQLの違いと使用例についてのチュートリアルをご覧ください。データベースの使用方法についてさらに詳しく読みたい場合は、PostgreSQLのクエリについてのイントロダクション記事をご覧いただくか、DigitalOceanのManaged Databases製品をご覧ください。

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-ruby-on-rails-application-on-ubuntu-20-04