Ubuntu18.04のRubyonRailsアプリケーションでPostgreSQLを使用する方法
序章
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パッケージインデックスを更新して、リポジトリが最新であることを確認します。
- sudo apt update
次に、PostgreSQLとその開発ライブラリをインストールします。
- 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ユーザー名に置き換えます。
- sudo -u postgres createuser -s sammy -P
指定したので -P
フラグを立てると、新しい役割のパスワードを入力するように求められます。 必要なパスワードを入力し、将来のステップで構成ファイルで使用できるように、必ず記録してください。
このコマンドでは、 createuser
名前の付いたロールを作成するには sammy
. The -s
このユーザーにスーパーユーザー特権を与え、 sudo -u
からコマンドを実行できるようになりました postgres
PostgreSQLのインストール時に自動的に作成されるアカウント。
注: Ubuntu 18.04でのPostgreSQLの認証モードは、次のように開始されるため ident
、デフォルトでは、Ubuntuユーザーは同じ名前のロールを持つPostgreSQLでのみ操作できます。 詳細については、認証に関するPostgreSQLの公式ドキュメントを確認してください。
使用しなかった場合 -P
フラグを立て、ロールの作成後にロールのパスワードを設定する場合は、次のコマンドを使用してPostgreSQLコンソールに入ります。
- sudo -u postgres psql
PostgreSQLコンソールのプロンプトとともに、次の出力が表示されます。
Outputpsql (10.9 (Ubuntu 10.9-0ubuntu0.18.04.1))
Type "help" for help.
postgres=#
PostgreSQLコンソールは postgres=#
促す。 PostgreSQLプロンプトで、次のコマンドを入力して、新しいデータベースロールのパスワードを設定し、強調表示された名前を作成した名前に置き換えます。
- \password sammy
PostgreSQLはパスワードの入力を求めます。 プロンプトで目的のパスワードを入力し、確認します。
次に、次のコマンドを入力してPostgreSQLコンソールを終了します。
- \q
通常のプロンプトが再び表示されます。
このステップでは、スーパーユーザー権限を持つ新しいPostgreSQLロールを作成しました。 これで、この役割を使用してデータベースを作成する新しいRailsアプリを作成する準備が整いました。
ステップ3–新しいRailsアプリケーションを作成する
PostgreSQL用に構成されたロールを使用して、PostgreSQLをデータベースとして使用するように設定された新しいRailsアプリケーションを作成できるようになりました。
まず、ホームディレクトリに移動します。
- cd ~
このディレクトリに新しいRailsアプリケーションを作成し、 appname
あなたがあなたのアプリと呼びたいものは何でも:
- rails new appname -d=postgresql
The -d=postgresql
オプションはPostgreSQLをデータベースとして設定します。
このコマンドを実行すると、 appname
基本的なRailsアプリケーションのすべての要素を含むホームディレクトリに表示されます。
次に、アプリケーションのディレクトリに移動します。
- cd appname
新しいRailsアプリケーションを作成し、プロジェクトのルートディレクトリに移動したので、Railsアプリ内からPostgreSQLデータベースを構成および作成できます。
ステップ4–データベースの構成と作成
作成するとき development
と test
アプリケーションのデータベースの場合、RailsはUbuntuユーザー名用に作成したPostgreSQLロールを使用します。 Railsがこれらのデータベースを確実に作成するために、プロジェクトのデータベース構成ファイルを変更します。 次に、データベースを作成します。
Railsアプリケーションで行う構成変更の1つは、最後の手順で作成したPostgreSQLロールのパスワードを追加することです。 パスワードなどの機密情報を安全に保つために、構成ファイルに直接書き込むのではなく、これを環境変数に保存することをお勧めします。
ログイン時に環境変数にパスワードを保存するには、次のコマンドを実行して、 APPNAME
アプリの名前と PostgreSQL_Role_Password
最後の手順で作成したパスワードを使用します。
- echo 'export APPNAME_DATABASE_PASSWORD="PostgreSQL_Role_Password"' >> ~/.bashrc
このコマンドは、 export
あなたへのコマンド ~/.bashrc
ログイン時に環境変数が設定されるようにファイルします。
現在のセッションの変数をエクスポートするには、 source
指図:
- source ~/.bashrc
パスワードを環境に保存したので、構成ファイルを変更します。
お好みのテキストエディタでアプリケーションのデータベース構成ファイルを開きます。 このチュートリアルでは、 nano
:
- nano config/database.yml
下 default
セクション、という行を見つけます pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
次の強調表示された行を追加して、資格情報と作成した環境変数を入力します。 次のようになります。
...
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
、 それから ENTER
.
Railsでのデータベースの構成の詳細については、Railsのドキュメントを参照してください。
これで、に変更を加えました config/database.yml
、を使用してアプリケーションのデータベースを作成します rails
指図:
- rails db:create
Railsがデータベースを作成すると、次の出力が表示されます。
OutputCreated database 'appname_development'
Created database 'appname_test'
出力が示すように、このコマンドは development
と test
PostgreSQLサーバーのデータベース。
これで、Railsアプリに接続されたPostgreSQLデータベースができました。 アプリケーションが機能していることを確認するための次のステップは、構成をテストすることです。
ステップ5–構成のテスト
アプリケーションがPostgreSQLデータベースを使用できることをテストするには、Webアプリケーションを実行してブラウザに表示されるようにします。
を使用して rails server
コマンドを実行し、Railsアプリの組み込みWebサーバーPumaでWebアプリケーションを実行します。
- 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
:
- 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
ファイアウォール内:
- sudo ufw allow 3000
次に、サーバーのパブリックIPアドレスを検索します。 これを行うには、次を実行します curl
指図:
- curl http://icanhazip.com
これにより、パブリックIPアドレスが返されます。 と一緒に使用してください rails server
コマンド、置換 server_public_IP
サーバーのパブリックIPを使用する場合:
- rails server --binding=server_public_IP
これで、ポート上のサーバーのパブリックIPアドレスを介して、ローカルWebブラウザーでRailsアプリケーションにアクセスできるようになります。 3000
訪問することによって:
http://server_public_IP:3000
このURLには、RubyonRailsのウェルカムページがあります。
これは、アプリケーションが適切に構成され、PostgreSQLデータベースに接続されていることを意味します。
構成をテストした後、ポートを閉じたい場合 3000
、次のコマンドを使用します。
- sudo ufw delete allow 3000
結論
このチュートリアルでは、Ubuntu18.04サーバー上のデータベースとしてPostgreSQLを使用するように構成されたRubyonRailsWebアプリケーションを作成しました。 Rubyプログラミング言語について詳しく知りたい場合は、Rubyシリーズのコーディング方法をご覧ください。
アプリケーション用のデータベースの選択の詳細については、 SQLite、PostgreSQL、およびMySQLの違いとユースケースに関するチュートリアルを確認してください。 データベースの使用方法について詳しく知りたい場合は、 PostgreSQLでのクエリの概要の記事を参照するか、DigitalOceanの管理対象データベース製品を参照してください。