【個人開発入門】Ruby/Rails開発環境構築[後編]PostgreSQL&サーバー接続【2024年7月】

DB

はじめに

今回は、前回に引き続きRubyでアプリケーション開発する流れを確認していきたいと思います。

メッセージングアプリの作成を通して、基本的な機能を構築していきます。

💡 今回はmacOSを対象にしています。要望がございましたらWindows版も作成したいと思いますのでコメントをください。

前回でパッケージのインストールを実施しました。

本記事では、Railsプロジェクトを作成して、railsの初期画面を確認するところまで進めていきます。

流れ

以下のような流れで実施していきます。

後半の機能実装については、順次検討して進めていきます。

まずは、どんなWebアプリケーションにもある基本的な機能の実装から進めていきます。

  1. 環境構築
    1. パッケージのインストール
      1. Homebrew
      2. rbenv
      3. ruby
      4. bundler
      5. yarn
      6. rails
      7. PostgreSQL
    2. プロジェクトの作成[⭐️本記事の内容]
      1. Railsアプリケーションの作成
      2. データベースの作成
      3. サーバー起動と稼働確認
  2. トップページの作成
  3. 認証機能の実装
  4. etc…

プロジェクトの作成

前回までで、パッケージのインストールが完了しているので、プロジェクトを作成してRailsアプリケーションの雛形を確認していきます。

Railsアプリケーションを作成

まずは、Railsのバージョンを確認しておきます。

$ gem search ^rails$ -l
*** LOCAL GEMS ***
rails (6.0.3.4)

次に、任意の作業フォルダに移動して、rails newコマンドを使用して、railsアプリケーションの雛形を作成します。

$ mkdir dev && cd dev
$ rails _6.0.3.4_ new rails-app-1st --database=postgresql

実行すると、作成したディレクトリ内に、railsアプリの雛形として多数のファイルが生成されます。しかし、バージョンや依存関係でいくつかの警告やエラーがでることがあるかもしれません。

本記事投稿時点では以下のようなエラーが出力されました。

$ rails _6.0.3.4_ new rails-app-1st --database=postgresql
error /Users/username/dev/rails-app-1st/node_modules/node-sass: Command failed.
Exit code: 1
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.

Pythonの環境変数に必要なPythonランタイムが指定されていないようですので、以下のコマンドで再インストールしていきます。

$ cd rails-app-1st
$ export PYTHON=$(which python3) && yarn add node-sass

これで無事railsアプリが作成できました。

💡 実行する時期の推奨バージョン、依存関係によっては、上記以外のエラーが出力される場合もございます。rails newコマンドの出力結果(長いですが。。)をよく確認して適切に対処していただくと後続の実装で詰まりづらくなるかと思います。

データベースの作成

以下のコマンドで、カレントディレクトリを確認してDB作成コマンドを実行します。

$ pwd
/dev/rails-app-1st
$ rails db:create

rails db:createの実行時に以下のようなエラーが出る場合がございます。

その際は対処法としてご参考ください。

rails db:create時のエラー①

💡 config/webpacker.ymlの設定変更が必要なケース

以下のように設定変更を促されます。

指示通りに変更します。falseになっていても指摘されることもあるようです(?)

$ rails db:create
warning Integrity check: System parameters don't match
error Integrity check failed
error Found 1 errors.

========================================
  Your Yarn packages are out of date!
  Please run `yarn install --check-files` to update.
========================================

To disable this check, please change `check_yarn_integrity`
to `false` in your webpacker config file (config/webpacker.yml).

以下のように、設定ファイルを変更して、必要なパッケージをインストールすることでエラーがなくなります。config/webpacker.ymlの更新は、development箇所含む2箇所あるので忘れないように変換しておきましょう。

$ pwd
/dev/rails-app-1st
$ sed -i '' 's/check_yarn_integrity: false/check_yarn_integrity: true/g' config/webpacker.yml && yarn install --check-files

これでもエラーが続く場合は、以下のコマンドでyarn cacheとnode_modulesを削除してから再実行しましょう。

$ rm -rf node_modules/
$ rm yarn.lock
$ yarn install

rails db:create時のエラー②

💡 すでに5432ポートを使用しているケース

以下のようなエラー文が表示されていれば、別のプロセスで5432を使用しているかもしれません。

$ rails db:create
connection to server on socket "/tmp/.s.PGSQL.5432" failed: fe_sendauth: no password supplied
PG::ConnectionBad: connection to server on socket "/tmp/.s.PGSQL.5432" failed: fe_sendauth: no password supplied
$ rails db:create
connection to server at "::1", port 5432 failed: FATAL: password authentication failed for user "testuser"
PG::ConnectionBad: connection to server at "::1", port 5432 failed: FATAL: password authentication failed for user "testuser"

HomebrewのPostgreSQLのログを確認してみましょう。

$ cat /opt/homebrew/var/log/postgresql@14.log
2024-07-12 22:15:55.494 JST [60977] LOG:  could not bind IPv6 address "::1": Address already in use
2024-07-12 22:15:55.494 JST [60977] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2024-07-12 22:15:55.494 JST [60977] LOG:  could not bind IPv4 address "127.0.0.1": Address already in use
2024-07-12 22:15:55.494 JST [60977] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2024-07-12 22:15:55.494 JST [60977] WARNING:  could not create listen socket for "localhost"
2024-07-12 22:15:55.494 JST [60977] FATAL:  could not create any TCP/IP sockets
2024-07-12 22:15:55.494 JST [60977] LOG:  database system is shut down

上記のログのように別のプロセスで5432ポートを使用済みと記録されています。

lsofで確認してみると別のプロセスで使用しているようでした。。

$ sudo lsof -i:5432
Password:
COMMAND  PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
postgres 600 postgres    7u  IPv6 0x758d57f8209a3bef      0t0  TCP *:postgresql (LISTEN)
postgres 600 postgres    8u  IPv4 0x758d57ee871310bf      0t0  TCP *:postgresql (LISTEN)

別の用途で使用していないことを確認できたら、以下のようにkill PIDで削除しておきましょう。

$ kill 600

rails db:create時のエラー②

💡 DBログイン認証情報が間違っているケース

以下のように出力された場合、ターミナルのログインユーザー(DBをこれから作成しようとしているユーザー)が、rails-app/rails-app-1st/config/database.yml で定義されていない、あるいは、別のユーザーが指定されていてroleが無い可能性があります。

$ rails db:create
connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "rails_app_1st" does not exist
PG::ConnectionBad: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "rails_app_1st" does not exist

この場合は、以下のコマンドでカレントユーザーを確認して、ymlファイルに反映しておきましょう。

$ whoami

サーバー起動と稼働確認

諸々のエラーが解消されたら、サーバーを起動しますが、改めてPostgreSQLが起動しているかは確認しておきましょう。(直前までの手順が完了していれば起動しているはずです)

$ brew services info postgresql@14
postgresql@14 (homebrew.mxcl.postgresql@14)
Running: ✔
Loaded: ✔
Schedulable: ✘
User: myuser
PID: 62221

では以下のコマンドでサーバーを立ち上げます。

rails sと省略もできます。

$ rails server
〜省略〜
=> Booting Puma
=> Rails 6.0.6.1 application starting in development
=> Run `rails server --help` for more startup options
Puma starting in single mode...
* Version 4.3.12 (ruby 2.7.2-p137), codename: Mysterious Traveller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://127.0.0.1:3000
* Listening on tcp://[::1]:3000
Use Ctrl-C to stop
Started GET "/" for ::1 at 2024-07-12 22:48:09 +0900
Processing by Rails::WelcomeController#index as HTML
〜省略〜
Completed 200 OK in 14ms (Views: 5.8ms | ActiveRecord: 0.0ms | Allocations: 2933)

上記のようにリッスン先URLとCompletedの表示が確認できたら、ブラウザを起動して、以下のURLにアクセスしましょう。

http://localhost:3000

または

http://127.0.0.1:3000

無事、デフォルト画面にアクセスできました。

まとめ

今回は、DBの作成とサーバー起動、接続まで進めました。

railsは何かとエラーが多発して、環境構築でも大変ですね。。

やっと開発のスタートラインに立ちましたので、次回以降、機能実装に入っていきたいと思います!

最後までご覧いただきありがとうございました!

コメント

タイトルとURLをコピーしました