【Render,Rails,Docker】本番環境でログを見たり、コンソールを使う方法

## はじめに
個人開発でアプリを作成中、

・Renderでデプロイしたけどログが見られない
・本番環境でもコンソールを使いたい

という場面があり、方法を調べたので備忘録としてまとめておきたいと思います！

:::note warn

私はプログラミング学習中の初学者です。
内容に誤りがある場合がございます。
もし間違いや改善点がございましたらご指摘いただけますと幸いです。
:::

## 使用環境
Docker
Ruby 3.2.2
Ruby on Rails 7.0.8
Render

※すでにRenderにてデプロイが終わっていることを前提としています
## Renderでログが見たい
以下の画像のようにRnederの「Logs」を見れば、ログを見ることができます。
しかし、私の場合は、環境設定ができておらず表示されない現象が起きていました。
![名称未設定のデザイン.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532276/5ad2b4a0-1258-874c-65bd-1f7cb7f83349.jpeg)
## 対応方法
Render側にRAILS_LOG_TO_STDOUTという環境変数を設定する。
#### 対応手順
1\. メニューの「Dashboard」
2\. 設定したいアプリケーション選択
3\. 「Environment」タブの「Environment Variables」
4\. 「Add Environment Variable」ボタンをクリック
5\. 「Config Vars」にそれぞれ以下を入力
　    KEY：RAILS_LOG_TO_STDOUT
 　   VALUE：true
6\. 「Save Changes」ボタンをクリック
7\. 再デプロイ
![名称未設定のデザイン (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532276/4a422dd2-93eb-64ed-7de3-0bd3e8b630e3.jpeg)

#### Railsの設定ファイルについて
Railsではproduction.rbでRAILS_LOG_TO_STDOUTを参照しています
```ruby:config/environments/production.rb
Rails.application.configure do
 (略)
 if ENV["RAILS_LOG_TO_STDOUT"].present?
    logger           = ActiveSupport::Logger.new(STDOUT)
    logger.formatter = config.log_formatter
    config.logger    = ActiveSupport::TaggedLogging.new(logger)
 end
 （略）
end
```
## 本番環境でもコンソールを使いたい
Render有料プランに入っているなら、「Shell」を使えば、コンソールを使うことができます。`rails c`コマンドで立ち上げることができます！
![名称未設定のデザイン (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532276/5f4fb78b-b0a9-14f8-bd86-cf6011f0edf2.jpeg)
### SSHで接続する
レンダリング サービスで SSH を初めて使用する場合は、SSH キーをレンダー アカウントに追加する必要があります。
https://docs.render.com/ssh
![名称未設定のデザイン (3).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532276/327f967d-dcf8-0510-5b4e-d0fc49edcd03.jpeg)
公式サイトの通りにやればできるかと思いますが、私の行った方法も紹介いたします。
1\. 「Account Settings」
2\. 「SSH Public Keys」
3\. 「Add SSH Public Key」クリック
![9a4e8945ce2ef20f469cbcc13f04a345.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532276/eb8536f8-c03d-70be-7fbf-42502b335d03.png)
4\. ターミナルで`ls -l ~/.ssh/*.pub` `cat ~/.ssh/id_rsa.pub`確認します。
Keyに、ssh-rsaから始まる内容をコピーして貼り付ける。Name (Optional)は何でも良いと思います。
![名称未設定のデザイン (4).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532276/447cca67-ab41-a160-5246-d4da1e67f48b.jpeg)
5\. 「Add SSH Public Key」 クリック

## ターミナルで使いたい
Render無料プランだとコンソール使えないのか？と言ったらそんなことはありません！
RenderCLIをインストールしたらターミナルでも使えます🥳
https://docs.render.com/cli
#### RenderCLIセットアップ
1\. Homebrewを使用してRenderCLIをMacOSやLinuxにインストール
```
brew tap render-oss/render
brew install render
```
2\. RenderのAPIキー設定
「Account Settings」→「API Keys」→「Create API Key」クリック
自分のアプリの名前などで作成してください
3\. Render CLIをセットアップ
```
render config init
```
指示に従って入力してください
```
INFO Let's create your default profile.
 ? What is this profile's default region? (oregon) › singapore
 ? Provide your API key from the Dashboard: › ********************************
 ? Enable SSH pinning in `known_hosts`? (Y/n) › Yes
INFO Done! You're ready to use the Render CLI!
```
```
render commands
```
でアプリケーションで使用されるコマンドのアルファベット順のリストが表示されます。
#### ログの見方
```
render services tail --id <serviceId>
```
どのサービスのログを表示するかを識別するためにサービスIDが必要となります。
以下コマンドでサービスのIDを確認し、必要なサービスのログを取得してください。
また、サービスIDは、Renderのダッシュボード上でサービスを選択したときのURLに含まれています！
```
render services list
```
確認できたら、`<serviceId>`のところに入力してください！
ターミナルで入力しても、何も起きないと思いますが、ご自分のアプリを触って見てください！ログが出力されるハズです！
`Ctrl+C`で終了できます。
#### コンソールの使いかた
(課金しないと、もしかしたらclosed by remotehostとなり、使えないかもしれません！)
![名称未設定のデザイン (6).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532276/9e5885d4-37d7-fb8e-eae7-86d696fc19a6.jpeg)
https://docs.render.com/ssh#use-with-a-docker-container
```
YOUR_SERVICE@ssh.YOUR_REGION.render.com
ssh <サービスID>@ssh.singapore.render.com
```
1\. ダッシュボードで自分のアプリを選択し、「Connect」の「SSH」をコピー
2\. ターミナルで前にコピーしたコマンドを貼り付け(少し時間かかる)
3\. root@\<serviceId>:~# のようなコマンドが出てきたら、
```
root@\<serviceId>:~# cd /app
```
`cd /app`で自分のアプリに移動する。
`rails c`など使えるようになったハズです！終わる時は`exit`。
## おわりに
私の場合は開発環境では問題ないのに、本番環境だと動かない、ということが頻繁に起きていて、原因を特定するためにログやコンソールが使いたい！と思って調べました。
意外とRenderのログのことなど説明された記事を見つけることができず悩んでいたのですが、Renderの公式サイトに全て書いてありました😅まずは公式を読め！を実感しました。
同じように悩んでいる方の助けになったら幸いです。





## 参考
https://qiita.com/naitya0412/items/3102ad59124d38433b2e

https://docs.render.com/ssh

https://docs.render.com/cli