Ubuntu 20.04でRuby on RailsアプリケーションとPostgreSQLを使う方法
はじめに
Ruby on RailsのWebフレームワークを使用する場合、デフォルトでアプリケーションはSQLiteをデータベースとして使用します。SQLiteは軽量で持ち運びができ、使いやすい関係型データベースであり、特に低メモリ環境で優れたパフォーマンスを発揮するため、多くの場合に適しています。しかし、より高度なアプリケーションで信頼性の高いデータ整合性とプログラムからの拡張性が必要な場合は、PostgreSQLデータベースがより強力で柔軟な選択肢となります。Ruby on RailsのセットアップをPostgreSQLを使用するように設定するためには、追加の手順を実行する必要があります。
このチュートリアルでは、Ubuntu 20.04 サーバに接続された PostgreSQL データベースを利用する Ruby on Rails 開発環境をセットアップします。PostgreSQL をインストールし、設定した後、PostgreSQL をデータベースサーバとして使用する Rails アプリケーションを作成してセットアップをテストします。
前提条件 (Zentei jouken)
このチュートリアルには次のものが必要です。
- An Ubuntu 20.04 server set up by following the Initial Server Setup Guide for Ubuntu 20.04, including a non-root user with sudo privileges and a firewall.
- A Ruby on Rails development environment installed on your Ubuntu 20.04 server. To set this up, follow How to Install Ruby on Rails with rbenv on Ubuntu 20.04. This tutorial will use version 3.1.2 of Ruby and 7.0.4 of Rails; for information on the latest versions, check out the official sites for Ruby and Rails.
ステップ1– PostgreSQLのインストール
Ruby on RailsのウェブアプリケーションでPostgreSQLをデータベースとして設定するためには、まずサーバーにデータベースをインストールします。
sudo権限を使用して、APTパッケージインデックスを更新し、リポジトリを最新の状態にします。
- sudo apt update
次に、PostgreSQLとその開発ライブラリをインストールしてください。
- 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のユーザー名に置き換えてください。
- sudo -u postgres createuser -s sammy -P
-Pフラグが指定されたので、新しいロールのパスワードを入力するように求められます。希望のパスワードを入力し、後のステップで設定ファイルで使用できるように記録してください。
createuserコマンドを使用して、sammy(またはお好みのユーザー名)という役割を作成します。-s フラグはこのユーザーにスーパーユーザー特権を与えます。また、sudo -uを使って、PostgreSQLのインストール時に自動的に作成されるpostgresアカウントからコマンドを実行することができます。
Note
もし、-Pフラグを使用せずにロールを作成した後で、そのロールにパスワードを設定したい場合は、次のコマンドでPostgreSQLコンソールに入力してください。
- sudo -u postgres psql
以下の出力とともに、PostgreSQLコンソールのプロンプトが表示されます。
psql (12.12 (Ubuntu 12.12-0ubuntu0.20.04.1)) Type “help” for help. postgres=#
PostgreSQLコンソールにはpostgres=#プロンプトが表示されます。PostgreSQLプロンプトで、新しいデータベースロールのパスワードを設定するために、以下のコマンドを入力してください。ハイライトされた名前を作成した名前で置き換えてください。
- \password sammy
PostgreSQLはパスワードを求めるプロンプトを表示します。プロンプトに希望するパスワードを入力し、それを確認してください。
今、このコマンドを入力してPostgreSQLコンソールを終了してください。
- \q
通常のプロンプトが再度表示されます。 (Tsūjō no puronputo ga saido hyōji sa remasu.)
このステップでは、スーパーユーザー権限を持つ新しい PostgreSQL のロールを作成しました。これで、このロールを使用してデータベースを作成する新しい Rails アプリを作成する準備が整いました。
ステップ3-新しいRailsアプリケーションの作成
PostgreSQLの役割が設定された状態で、新しいRailsアプリケーションを作成し、データベースとしてPostgreSQLを使用するようにセットアップすることができます。
最初に、ホームディレクトリに移動してください。
- cd ~
このディレクトリに新しいRailsアプリケーションを作成し、appnameをアプリの名前に置き換えてください。
- rails new appname -d=postgresql
「-d=postgresql」オプションは、データベースとしてPostgreSQLを設定します。
このコマンドを実行すると、ホームディレクトリに「appname」という名前の新しいフォルダが表示されます。このフォルダには、基本的なRailsアプリケーションの要素がすべて含まれています。
次に、アプリケーションのディレクトリに移動してください。
- cd appname
あなたが新しいRailsアプリケーションを作成し、プロジェクトのルートディレクトリに移動したら、Railsアプリケーション内からPostgreSQLデータベースを設定して作成できます。
ステップ4:データベースの設定と作成
アプリケーションの開発とテストのためにデータベースを作成する際に、RailsはUbuntuのユーザー名に作成したPostgreSQLのロールを使用します。これらのデータベースをRailsが作成するために、プロジェクトのデータベース設定ファイルを変更する必要があります。その後、データベースを作成します。
あなたのRailsアプリケーションの構成変更の1つは、最後のステップで作成したPostgreSQLのロールのパスワードを追加することです。パスワードなどの機密情報を安全に保つために、設定ファイルに直接書くのではなく、環境変数にパスワードを格納することが推奨されています。
ログイン時にパスワードを環境変数に保存するには、次のコマンドを実行してください。APPNAMEの部分をアプリの名前に、PostgreSQL_Role_Passwordの部分を前の手順で作成したパスワードに置き換えてください。
- echo ‘export APPNAME_DATABASE_PASSWORD=”PostgreSQL_Role_Password“‘ >> ~/.bashrc
以下のコマンドは、環境変数がログイン時に設定されるように、exportコマンドを~/.bashrcファイルに書き込みます。
現在のセッションで変数をエクスポートするには、ソースコマンドを使用してください。
- source ~/.bashrc
環境にパスワードを保存したら、設定ファイルを変更することができます。
お好みのテキストエディタで、アプリケーションのデータベース設定ファイルを開いてください。このチュートリアルでは、nanoを使用します。
- nano config/database.yml
デフォルトセクションの中で、次の行を見つけてください: 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 + x、Yを押して保存し、エンターキーを押して終了してください。
Railsのドキュメンテーションで、データベースの設定に関する詳細情報を確認してください。
「config/database.yml」を変更したら、Railsコマンドを使用してアプリケーションのデータベースを作成してください。
- rails db:create
Railsがデータベースを作成すると、以下の出力が表示されます。
Created database ‘appname_development’ Created database ‘appname_test’
以下の出力に示されているように、このコマンドはあなたのPostgreSQLサーバーに開発用とテスト用のデータベースを作成しました。
あなたのRailsアプリには現在、PostgreSQLデータベースが接続されています。アプリケーションが正常に動作することを確認するために、設定をテストします。
ステップ5- 設定のテスト
PostgreSQLデータベースを使用することができるかどうかをテストするために、Webアプリケーションを実行し、ブラウザに表示されるようにします。
「rails server」コマンドを使用して、Railsアプリケーション内の組み込みウェブサーバーでウェブアプリケーションを実行してください。Pumaが使用されます。
- rails server –binding=127.0.0.1
— bindingオプションは、アプリケーションを指定したIPにバインドします。デフォルトでは、このフラグによってRailsは0.0.0.0にバインドされ、つまりRailsはすべてのインターフェースでリスンすることを意味します。そのため、localhostを指定するためには、127.0.0.1を使用することがより安全です。デフォルトでは、アプリケーションはポート3000でリスンします。
一度Railsアプリケーションが実行されると、コマンドプロンプトが消えて、この出力が表示されます。
=> 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にリクエストを送信してください。
- curl http://127.0.0.1:3000
HTMLで、次のような形式で大量の出力を受け取ります。
… <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を開放してください。
- sudo ufw allow 3000
次に、サーバーの公開IPアドレスを調べてください。次のcurlコマンドを実行することで確認できます。
- curl http://icanhazip.com
これによって、あなたの公開IPアドレスが返されます。rails serverコマンドを使用し、server_public_IPをあなたのサーバーの公開IPに置き換えてください。
- rails server –binding=server_public_IP
以下の通り日本語で言い換えます。複数の選択肢が必要な場合でも一つの選択肢で大丈夫です。
「サーバーの公開IPアドレスのポート3000を介して、ローカルのWebブラウザからRailsアプリケーションにアクセスできるようになります。下記のURLにアクセスしてください。」
http://server_public_IP:3000
このURLで、Ruby on Railsのページを見つけることができます。
ホームページにアクセスできれば、アプリケーションは適切に設定され、PostgreSQLデータベースに接続されています。
設定をテストした後、ポート3000を閉じたい場合は、以下のコマンドを使用してください。
- sudo ufw delete allow 3000
結論は次のように言えます。
このチュートリアルでは、Ubuntu 20.04 サーバー上でデータベースとして PostgreSQL を使用するように構成された Ruby on Rails ウェブアプリケーションを作成しました。もしもっと Ruby プログラミング言語について学びたい場合は、当社の「Ruby でのコーディング方法」シリーズをチェックしてみてください。
アプリケーションに適したデータベースを選ぶための詳細情報は、SQLite、PostgreSQL、およびMySQLの違いと使用例に関する当社のチュートリアルをご覧ください。データベースの使用方法についてさらに読みたい場合は、「PostgreSQLのクエリに関する入門記事」やSilicon Cloudの「Managed Databases」製品を探索してください。