標記環境でリアルタイムで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の違いです。
インフラ周りについて何が分からないか分からない状態です。
質問の意図がずれている可能性もあります。
他、参照したいデータがありましたら、ご連絡ください。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/29 07:24
2020/12/02 03:29
2020/12/02 13:02