質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

89.20%

Railsのログをクリアしたい

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 239

begenner

score 68

現在AWS(amazon linux2)にRailsアプリをデプロイし、ブラウザでの動作確認をしていました。
エラー発生時に/var/www/rails/【webapp】/log/production.logproductionのログを確認していますが、
ログの量が多すぎるためクリアしようと思い、

Railsのログをクリアするコマンド | なべしす

を参考にAWSでssh接続してRailsアプリディレクトリ直下でbundle exec rake log:clearを実行すると

Errno::EACCES: Permission denied @ rb_sysopen - log/nginx.access.log


というエラーが発生し、クリアできませんでした(m_ _m)
原因はlog/nginx.access.logの権限だと思うのですが、そもそも下記の項目についての理解が乏しいです。

  • nginxのログはRailsアプリのlogフォルダの中に入れていいのか(入れた方がいいのか)?
  • 入れたままでよい場合、該当ファイル権限の設定は何が適しているのか?
    (777ではやはりまずいのか、権限周りはまだまだ不得手です)
  • 入れない場合はどこに保存、ログを出力する設定にした方がいいのか(AWS EC2の場合)?

もしわかる方がいらっしゃればご教授いただきますようよろしくお願いいたします(m_ _m)

【前提条件】
下記の語句は置き換えてあります

  • Railsのアプリ名: 【webapp】
  • 取得済みのドメイン: 【myDomain】 
  • 自分のユーザー名: 【username】

動作環境

Rails AWS
Ruby: 2.4.5 Amazon linux2
Rails: 4.2.11.1 nginx: 1.16.1
Devise: 4.7.1 EC2、RDS(MySQL)
dotenv-railsを使用 HTTPS(Route53)設定済

エラー内容

bundle exec rake log:clearを実行すると

Errno::EACCES: Permission denied @ rb_sysopen - log/nginx.access.log

期待する動作

エラーが発生せずRailsに関するログをクリアしたい

Logフォルダ直下のファイル権限

[username@ip-xxx-xxx-xxx-xxx log]$ ls -la
# 合計 37428
# drwxrwxr-x  2 username  username      145 10月 23 11:19 .
# drwxr-xr-x 15 username  username      314 10月 25 14:01 ..
# -rw-rw-r--  1 username  username        0 10月 25 14:06 development.log
# -rw-rw-r--  1 username  username        0 10月 25 14:06 integration_test.log
# -rw-r--r--  1 nginx root   630457 10月 25 14:09 nginx.access.log
# -rwxrwxr-x  1 nginx username   171288 10月 24 15:13 nginx.error.log
# -rw-rw-r--  1 username  username 13831038 10月 25 14:06 production.log
# -rw-rw-r--  1 username  username 23682697 10月 25 14:06 unicorn.log
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

仰るとおり権限によるものかと思われます。
また権限を不用意に777にするのも好ましくありません。
運用上はさしたる問題はないかもしれませんが…。

基本的にはsudoを使ってルート権限で実行すればいいはずですが、お使いのrubyがsshのログインユーザ(ec2-user?)でセットアップされたものだとパスが通ってなくて失敗するかもしれません。

個人的にはログの管理をフレームワークの操作に頼るのはおすすめしないので、railsではなくてlogrotateを使ってローテーションすることをオススメします。
このへんとかこのへんが参考になります。
なぜかというと、OSのミドルウェアのログは基本的にlogrotateによって世代管理されているのに対し、フレームワークだけ個別にログを管理すると統一性が失われるからです。
また、ログを全部消してしまうのも好ましくないので、必要以上に増えないようにローテーションさせるのがいいでしょう。

ローテーションしつつログを残しておきたいならfluentdを使ってS3に送ったり(S3以外にも送れます)、CloudWatch Agentを使ってCloudWatch Logsに送ったりするといいです。

ちなみに、ミドルウェアのログは/var/log配下に置かれるのが基本なので、railsのログもそこに適当なディレクトリを切ってその中に吐かれるようにしたほうがわかりやすいかもしれませんね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/25 15:14

    とても丁寧に解説いただきありがとうございます!!
    sshのログインユーザーで
    sudo bundle exec rake log:clear
    を実行すると
    [sudo] username のパスワード:
    sudo: bundle: コマンドが見つかりません

    と表示され、失敗しました。
    すぐにログをクリアしたかったのでとりあえず権限を777で設定してクリアしました。

    logrotateに関しては初耳でしたので今後の参考にさせていただきたいと思います!!

    ありがとうございました!!

    キャンセル

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

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる