#現状
ゲストログインおよびログアウトボタンを押すとThe page you were looking for doesn’t exist.と表示されました。最近になってこのような現象が起こり、それまでは通常通りできておりました。
#該当するソースコード
app/views/devise/shared/_header.html.erb
<!DOCTYPE html>
<html>
<head>
<title>App</title>
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
</head>
<div class="container">
<header class="blog-header py-3">
<div class="row flex-nowrap justify-content-between align-items-center">
<div class="col-4 text-center">
<%= link_to image_tag("fresh.png",width:"120px",height:"65px"), root_path%>
</div>
<% if user_signed_in? %>
<div class="col-4 d-flex justify-content-end align-items-center">
<a class="btn btn-sm btn-outline-secondary" <%= link_to 'ログアウト', destroy_user_session_path, method: :delete %></a>
<% else %>
<div class="col-4 d-flex justify-content-end align-items-center">
<a class="btn btn-sm btn-outline-secondary" href="/users/sign_up">新規登録</a>
<a class="btn btn-sm btn-outline-secondary" href="/users/sign_in">ログイン</a>
<a class="btn btn-sm btn-outline-secondary" <%= link_to 'ゲストログイン', users_guest_sign_in_path, method: :post %></a>
<% end %>
</div>
</div>
</header>
<div class="nav-scroller py-1 mb-2">
<nav class="nav d-flex justify-content-between">
<% if controller_name != 'ways' %>
<%=link_to '試験方法',ways_path,class:"p-2 link-secondary"%>
<% else %>
<%=link_to '試験方法',ways_path,class:"p-2 link-secondary",style:"color: blue;"%>
<% end %>
<% if controller_name != 'words' %>
<%=link_to '用語',words_path,class:"p-2 link-secondary"%>
<% else %>
<%=link_to '用語',words_path,class:"p-2 link-secondary",style:"color: blue;"%>
<% end %>
<% if controller_name != 'questions' %>
<%=link_to 'クイズ問題',questions_path,class:"p-2 link-secondary"%>
<% else %>
<%=link_to 'クイズ問題',questions_path,class:"p-2 link-secondary",style:"color: blue;"%>
<% end %>
<% if controller_name != 'answers' %>
<%=link_to 'Q&A',answers_path,class:"p-2 link-secondary"%>
<% else %>
<%=link_to 'Q&A',answers_path,class:"p-2 link-secondary",style:"color: blue;"%>
<% end %>
<div class="text-muted">
<% if user_signed_in? %>
<% if current_user.image.attached? %>
<%=link_to image_tag(current_user.image,width:"30px",height:"30px",style:"border-radius: 50%"),"/users/#{current_user.id}" %>
<% end %>
<% if controller_name != 'users' %>
<%=link_to "#{current_user.nickname}さん", "/users/#{current_user.id}", class:"p-2 link-secondary"%>
<% else %>
<%=link_to "#{current_user.nickname}さん", "/users/#{current_user.id}", class:"p-2 link-secondary",style:"color: blue;"%>
<% end %>
<% else %>
<%= link_to 'FRESHとは',concretes_path,class:"p-2 link-secondary" ,style:"color: blue; font-size: 20px;"%>
<% end %>
</div>
</nav>
</div>
</div>
config/routes.rb
Rails.application.routes.draw do
devise_for :users, controllers: {
registrations: "users/registrations",
}
devise_scope :user do
post 'users/guest_sign_in', to: 'users/sessions#new_guest'
end
root to: "concretes#index"
resource :concretes, only: [:show]
resources :users, only: [:show,:edit]
resources :ways do
collection do
get 'search'
end
resources :likes, only: [:create, :destroy]
resources :waycomments, only: [:create, :destroy]
end
resources :questions do
collection do
get 'search'
end
resources :choices, only: [:index,:create]
end
resources :answers do
collection do
get 'search'
end
resources :responses, only: [:create]
end
resources :words do
collection do
get 'search'
end
end
end
#原因
ターミナルに「tail -f production.log」を打ったところActiveRecord::RecordNotFound (Couldn't find User with 'id'=guest_sign_in):と表示され、本番環境用のデータベースにゲスト用のuser情報がなかったためです。
#解決方法
下記コードを記述し、ゲストログインボタンを押した段階でuserの情報を保存できるようにし、nginxを再起動したところ解決しました。
app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
def new_guest
user = User.find_or_create_by(email: 'guest@example.com') do |user|
user.nickname = "ゲスト"
user.password = SecureRandom.alphanumeric(10) + [*'a'..'z'].sample(1).join + [*'0'..'9'].sample(1).join
user.text = "ゲストです。"
end
sign_in user
redirect_to root_path
end
end
#参考
https://qiita.com/toto_public/items/61dcd0fb8fcdcb335195