Open6

rails-next-zenn-cloneをcloneしながらメモる

ogaru_shogaru_sh
$ docker-compose run hoge

no configuration file provided: not found

docker-compose.ymlを作ったのになぜ。。。と思っていたがファイル名をタイポしたためだった。

ogaru_shogaru_sh
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running

「Dockerが起動してないよ」ということだったので

$ sudo service docker start

もしくはDocker Desctopでdockerを起動

ogaru_shogaru_sh

Railsには

  • MVCモード
  • APIモード

がある。

MVCモードは

  • Model:データベースとのやりとりを管理
  • View:HTML、CSS、JavaScriptなどのユーザーの表示部分を管理
  • Controller:ModelとViewを繋ぐ役割

今回はAPIモードで、フロントエンドをNext.jsで実装。

ogaru_shogaru_sh
root@40e52924546a:/myapp# rails s -b '0.0.0.0'
=> Booting Puma
=> Rails 7.0.8.4 application starting in development 
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 5.6.8 (ruby 3.1.2-p20) ("Birdie's Version")
*  Min threads: 5
*  Max threads: 5
*  Environment: development
*          PID: 46
Exiting
/usr/local/bundle/gems/puma-5.6.8/lib/puma/binder.rb:341:in `initialize': Address already in use - bind(2) for "0.0.0.0" port 3000 (Errno::EADDRINUSE)

解決する

ogaru_shogaru_sh

Pumaの止め方

PumaばRailsのWebサーバー
Pumaを起動することでHTTPリクエストを扱えるようになり、Railsアプリケーションでリクエストに対する動的な処理を行えるようになる

  • Pumaプロセスの確認
oot@40e52924546a:/myapp# ps aux| grep puma
root         1  0.4  1.4 912592 118380 pts/0   Ssl+ Sep04   0:02 puma 5.6.8 (tcp://0.0.0.0:3000) [myapp]

killしようと思ったがPID1問題が発生

PID 1 のプロセスは Linux カーネルに特別扱いされていて、そのプロセス自身が明示的に送信されたシグナルをハンドリングしていない場合それを無視します。コンテナの場合、アプリケーションのプロセスが PID 1 で実行されることが多い

とのこと
https://text.superbrothers.dev/200328-how-to-avoid-pid-1-problem-in-kubernetes/
https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/
PID 1以外でPumaが起動するように設定した方がよさそう

今はdocker restartで止めている