🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

3454閲覧

docker+rails+puma+nginxの開発において、pumaのログをリアルタイムで確認したい(デバッグに関しても)

Harluz

総合スコア19

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/11/23 01:55

編集2020/12/02 13:00

標記環境でリアルタイムでpumaのログを確認すること及びデバッグを実施したい。
(以前に同じ質問をしまして、苦肉の策としてホスト環境で実行することで解決済みとしました。同一質問は推奨されませんが、それを理解した上で、質問していることをお許しください)
docker環境でなければ、rails sを実行 → ターミナルにログ → デバッグモード
の流れだと思われる。
しかし、今回の環境においては、プロキシにnginxを挟んでいる。
docker-compose up を実行してもnginxのログのみが出力される。また、当然デバッグもできない。
qiitaやteratail等を参考にし、下記のとおりに修正してみました。

dockercompose

1version: '3' 2services: 3 app: &app_base 4 build: 5 context: . 6 environment: 7 RAILS_ENV: development 8 MYSQL_ROOT_PASSWORD: db_root_password 9 MYSQL_USER: app 10 MYSQL_PASSWORD: password 11 MYSQL_DATABASE: my_app_development 12 DATABASE_HOST: db 13 stdin_open: true ←追加 14 tty: true     ←追加 15 command: bundle exec puma -C config/puma.rb 16 volumes: 17 - .:/my_app 18 - public-data:/my_app/public 19 - tmp-data:/my_app/tmp 20 - log-data:/my_app/log 21 depends_on: 22 - db 23 db: 24 image: mysql:5.7 25 environment: 26 MYSQL_ROOT_PASSWORD: db_root_password 27 MYSQL_USER: app 28 MYSQL_PASSWORD: password 29 MYSQL_DATABASE: my_app_development 30 DATABASE_HOST: db 31 volumes: 32 - db-data:/var/lib/mysql 33 ports: 34 - "3316:3306" 35 web: 36 build: 37 context: containers/nginx 38 volumes: 39 - public-data:/my_app/public 40 - tmp-data:/my_app/tmp 41 ports: 42 - "3000:80" 43 depends_on: 44 - app 45volumes: 46 public-data: 47 tmp-data: 48 log-data: 49 db-data:

developmentrb

1config.logger = Logger.new(STDOUT)

pumarb

1threads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 }.to_i 2threads threads_count, threads_count 3port ENV.fetch('PORT') { 3000 } 4environment ENV.fetch('RAILS_ENV') { 'development' } 5plugin :tmp_restart 6app_root = File.expand_path('../..', __FILE__) 7bind "unix://#{app_root}/tmp/sockets/puma.sock" 8 9stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true

nginxconf

1# プロキシ先の指定 2# Nginxが受け取ったリクエストをバックエンドのpumaに送信 3upstream my_app { 4 # ソケット通信したいのでpuma.sockを指定 5 server unix:///my_app/tmp/sockets/puma.sock; 6} 7 8server { 9 listen 80; 10 # ドメインもしくはIPを指定 11 server_name example.com [or 192.168.xx.xx [or localhost]]; 12 13 access_log /var/log/nginx/access.log; 14 error_log /var/log/nginx/error.log; 15 16 # ドキュメントルートの指定 17 root /my_app/public; 18 19 client_max_body_size 100m; 20 error_page 404 /404.html; 21 error_page 505 502 503 504 /500.html; 22 try_files $uri/index.html $uri @my_app; 23 keepalive_timeout 5; 24 25 # リバースプロキシ関連の設定 26 location @my_app { 27 proxy_set_header X-Real-IP $remote_addr; 28 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 29 proxy_set_header Host $http_host; 30 proxy_set_header X-Forwarded-Proto $scheme; 31 proxy_pass http://my_app; 32 } 33}

参考資料
また、上記リンクではbinding.pryを挿入したところと同じ操作をした際にデバッグできると記述してありますが、ブラウザのリロードを押すだけでデバッグに切り替わらないのでしょうか?

同一の解決済み質問
ほぼ、同じ質問でunicronかpumaの違いです。

インフラ周りについて何が分からないか分からない状態です。
質問の意図がずれている可能性もあります。
他、参照したいデータがありましたら、ご連絡ください。
よろしくお願いします。

docker attach コンテナ名 を実行した様子
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

docker-compose up -d で compose をバックグラウンドで起動したあとに
docker-compose ps でアタッチしたいコンテナ名を確認します。

docker attach hogehoge_app_1 で起動している rails のコンテナにアタッチしてください。
フォアグラウンドで指定したコンテナの標準出力をもったターミナルが起動します。
(ただし、シグナルの扱いに癖があるので取り扱いはちょっと面倒です)

投稿2020/11/24 14:51

編集2020/11/25 02:40
motchang

総合スコア101

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Harluz

2020/11/29 07:24

返信が遅くなってしまい申し訳ありません docker attach コンテナ名 とした時に、ターミナルが黙ったままとなります。 enterを押下しても変わりありません。
motchang

2020/12/02 03:29

docker attach コンテナ名 としたあとでブラウザのリロードをした際に rails server でプロセスを起動したような標準出力は表示されないでしょうか?
Harluz

2020/12/02 13:02

質問にconsole画面を追加しました。ご確認ください。 ブラウザのリロードや他ページに移行してみるも変化なしです。
guest

0

ベストアンサー

Rails.rootはhostと共有するような設定にはなっていないのでしょうか?
私はなにも考えないでやったらそうなったのですが。

もしそうでしたら、host側で tail -f log/puma.log で読めます
ちょっとdelayはありますが。

投稿2020/11/23 05:32

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Harluz

2020/11/29 12:44

返信が遅くなってしまい申し訳ありません。 コンテナ内とローカルのそれぞれで tail -fを実行した結果を掲載しましたので、ご確認ください。 また、コンテナ内で実行した際、binding.pryを実行した箇所でデバッグモードに切り替わりましたが、timeoutになるまで反応しない上に、timeouterrorについてのlogしか残しませんでした。 また、delayがあるとおっしゃいましたが、全く更新される気配がありません。 それとも、webサーバで処理できるものは処理をしてそのログについてはアプリケーションサーバーまでt届かず、logが更新されない問いことなのか 知識が疎くて大変申し訳ありません。
Harluz

2021/01/03 02:07

大変時間が空いてしまいましたが、tail -fでログを確認することができました。 プラスしてそのままデバッグモードになって欲しかったのですが、tailはあくまでログの出力のためデバッグも何もないことに気付きました。 ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問