@Sgmkt0523

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

<Rails>ファイル内容の変更が反映されません。

プログラミング初心者なので稚拙な質問の仕方になりますがご了承ください。

解決したいこと

HTMLやその他ファイルに変更を加え、ブラウザで確認すると反映されていない
※時間経過(数分~数十分)で反映されます。

Ruby on Rails 7.1.5.1でWebアプリをつくっています。
サーバーに繋ぎ、ドメインも取得済の状態でrails newを行いRailsのウエルカムページの表示も出来ています。
が、トップページのルーティング、コントローラー、ビューを最小限のコードで書いたところ、ウエルカムページのまま変更が反映されません。
時間が経過すると反映されるような状態です。

以下開発環境です(不十分かもしれませんが)
・Rails 7.1.5.1
・Ruby 3.4.3
・Centos9
・LINUX
●NGINX ← リバースプロキシ

●Apache(PassengerでRailsを起動)

発生している問題・エラー

ファイル削除などの変更も時間経過しないと反映されません。
具体的には、
public/index.html を新規作成し、ブラウザで表示 → ファイル削除 → まだpublic/index.htmlを表示している
ような状態です。

該当するソースコード

routes.rb
Rails.application.routes.draw do
    root "top#index"
end
index.html.erb
<h1>トップページ</h1>
application.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title>ArMan2</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>
  </head>
  <body>
    <%= yield %>
  </body>
</html>

自分で試したこと

・シークレットモードのブラウザで確認
・キャッシュクリア(rm -rf tmp/*)
・再起動(touch tmp/restart.txt や sudo systemctl restart httpd)
・キャッシュしないよう設定変更

development.rb キャッシュ関連
  if Rails.root.join("tmp/caching-dev.txt").exist?
    config.action_controller.perform_caching = false
    config.action_controller.enable_fragment_cache_logging = false

    # config.cache_store = :memory_store
    config.cache_store = :null_store
    config.public_file_server.headers = {
      "Cache-Control" => "public, max-age=#{2.days.to_i}"
    }
  else
    config.action_controller.perform_caching = false

    config.cache_store = :null_store
  end

などです。

ものすごく困っているので、助けていただけますと幸いです。

0 likes

1Answer

下記について確認してみてください。

  • ブラウザ側のリロードは行っていますか?
    • サーバ側をいくら修正してもブラウザからアクセスし直さなければ表示は変わりません。
  • ブラウザのスーパーリロード(強制再読み込み)は試していますか?
    • ブラウザがキャッシュしている可能性があるので、表示が変わらないのであれば試してみるべき。
  • リロードを行なったとき、Railsやnginx,Apacheのアクセスログは出力されていますか?
    • ちゃんとリロードできているなら出力されるはず。
    • 出力されていないならブラウザ側のキャッシュの可能性があるのでスーパーリロードか別タブで再表示を試す
  • ログが出力されているならステータスコードはどうなっていますか?
    • 削除済みなら404になっているはず。
0Like

Comments

  1. @Sgmkt0523

    Questioner

    ご回答ありがとうございます。

    ・ブラウザ側のリロードは行っていますか?
    ・ブラウザのスーパーリロード(強制再読み込み)は試していますか?
    → スーパーリロードも試しましたが変化ありませんでした。

    ・リロードを行なったとき、Railsやnginx,Apacheのアクセスログは出力されていますか?
    → tail -f log/development.log → リロード時の出力なし
    → tail -f /var/log/httpd/access_log → リロード時の出力なし
    → tail -f /var/log/nginx/access.log → リロード時の出力あり

    ・ログが出力されているならステータスコードはどうなっていますか?
    → nginxのみ出力の為分かりません。

    上記がご回答いただき試した結果になります。
    他何か試した方がいいことがあればご教示いただけますと幸いです。

  2. nginxのログが出力されているなら、HTTPステータスコードが書かれていると思いますよ?

    192.168.33.1 - - [17/Jan/2024:08:47:50 +0000] "GET / HTTP/1.1" 200 37 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "-"
    

    こんな感じのログが出ていると思いますが、これの "GET / HTTP/1.1" の次の 200 がステータスコードです。削除ずみのファイルの場合、ここが404になります。

    config.public_file_server.headers = {
      "Cache-Control" => "public, max-age=#{2.days.to_i}"
    }
    

    よくみたら、Cache-Controlが public(=キャッシュ許可)でmax-ageが2日に設定されてますから、「2日間まではどこにキャッシュしてもいいよ」って書いてありますね。
    nginxだけログを返しているってことは、多分これをみたnginxがキャッシュしてます。

    キャッシュしたくないのであれば、こちらの記事を参考に、Cache-Controlの設定をいじってみてはどうでしょうか。

  3. @Sgmkt0523

    Questioner

    再度ご返信ありがとうございます。

    application_controller.rb

    class ApplicationController < ActionController::Base
        prepend_before_action :set_headers
    
     def set_headers
      response.headers['Cache-Control'] = 'no-store'
      response.headers['Pragma'] = 'no-cache'
     end
    end
    

    キャッシュしないよう上記修正 → トップページを表示 → ルーティングコメントアウト → リロードした時のログです。

    153.246.191.167 - - [29/May/2025:16:23:41 +0900] "GET / HTTP/2.0" 200 263 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
    

    となっていました。

    数分経つと反映され、Railsのウェルカムページになっていました。
    逆も同じでコメントアウトを外し、ルーティングを復活させてもウェルカムページから変わりません。

  4. 確認です。

    • Cache-Control: no-storeにした後、nginx,Apache,railsの再起動はかけていますか?
    • ルーティングを変更した後、Railsサーバの再起動はかけていますか?
    • nginx以外のログは相変わらず出ていませんか?
  5. @Sgmkt0523

    Questioner

    再返信ありがとうございます。

    都度以下のコマンドで再起動でしています。

    sudo systemctl restart httpd
    sudo systemctl restart nginx

    ログは変わらずnginxのログのみです。

Your answer might help someone💌