извиняюсь, если об этом уже спрашивали. С моим приложением rails все отлично работает в процессе разработки, но при переходе на Heroku я сталкиваюсь с проблемой, когда он пытается найти пользователя с идентификатором '1', но база данных пуста. Я перенес, сбросил и посеял базу данных, но все еще получаю ошибку из журналов Heroku.
Кажется, проблема в том, что мой _userportal частично встроен в файл article / index.html.erb, который вызывает current_user и logged_in? методы из ApplicationController.
Кажется, что ответ должен появиться у меня, как это должно быть связано с поиском User.find (session [: user_id]). Вернее, база данных не была должным образом сброшена после того, как ее подтолкнули к героку. В консоли heroku rails значение User.count равно 0, но приложение пытается найти пользователя с идентификатором «1». Я не уверен, почему это так.
Из логов героки:
2019-05-23T00:02:43.803680+00:00 app[web.1]: [fe18170f-fab4-4495-8fe2-b2502762afb9] Rendered articles/index.html.erb within layouts/application (8.5ms)
2019-05-23T00:02:43.803865+00:00 app[web.1]: [fe18170f-fab4-4495-8fe2-b2502762afb9] Completed 500 Internal Server Error in 10ms (ActiveRecord: 2.0ms)
2019-05-23T00:02:43.805254+00:00 app[web.1]: [fe18170f-fab4-4495-8fe2-b2502762afb9]
2019-05-23T00:02:43.805305+00:00 app[web.1]: [fe18170f-fab4-4495-8fe2-b2502762afb9] ActiveRecord::RecordNotFound (Couldn't find User with 'id'=1):
2019-05-23T00:02:43.805348+00:00 app[web.1]: [fe18170f-fab4-4495-8fe2-b2502762afb9]
2019-05-23T00:02:43.805403+00:00 app[web.1]: [fe18170f-fab4-4495-8fe2-b2502762afb9] app/controllers/application_controller.rb:4:in `current_user'
2019-05-23T00:02:43.805405+00:00 app[web.1]: [fe18170f-fab4-4495-8fe2-b2502762afb9] app/controllers/application_controller.rb:11:in `logged_in?'
ApplicationController.rb:
def current_user
if session[:user_id]
@current_user ||= User.find(session[:user_id])
else
@current_user = nil
end
end
def logged_in?
!!current_user
end
_userportal.html.erb:
<div class="container">
<div class="userportal">
<div class="sessionsection">
<% if logged_in? %>
Logged in as <%= current_user.username %>.
<br>
<br>
<%= button_to 'Log Out', logout_path, method: :delete, class: "btn btn-xs btn-danger" %>
<% else %>
<%= link_to 'Sign Up', signup_path %> or
<%= link_to 'Log In', login_path %>
<% end %>
</div>
<hr>
<div class="actionsection">
<%= link_to 'Create a post', current_user ? post_path : signup_path %>
<hr>
<%= link_to 'See All Posts', blog_path %>
</div>
</div>
</div>
Консоль Heroku:
irb(main):005:0> User.count
(1.7ms) SELECT COUNT(*) FROM "users"
=> 0
Heroku должен сделать current_user равным nil и не войти в систему правильно?
Спасибо всем, кто выручил! Пожалуйста, сообщите, если я должен предоставить больше кода / информации.
ОБНОВЛЕНИЕ:
Исправление было в методе current_user. Изменение:
@current_user ||= User.find(session[:user_id])
до:
@current_user ||= User.find_by(id: session[:user_id])
Работали!