500 (Internal Server Error) 해결 방법

2663 단어 error

1. 에러의 발견의 경위와 에러의 모습



이미지의 저장 여부를 검증 툴로 확인하고 있었는데 콘솔 부분에 아래와 같은 기재가 나왔습니다


2. 원인의 규명의 경위(방법)



데이터 저장이 제대로 이루어지고 있는데 왠지 에러를 내고 있어 일단 에러의 우측에 있는 url을 클릭하면, 이것 또 왠지 사용커녕 인용한 기억할 수 없는 ajax의 인용문의 개소에 에러 표시 날아 버렸고, 지금까지 많은 사람의 눈에 노출되어있는 소스가 잘못되었다고 표시되어 버렸습니다.

그 코드가 잘못되었다고 하는 것은 유석에 이상하다고 생각해, 이 에러에 관한 기사를 찾아 갔는데, 500 에러와는 서버측의 에러라고 하는 아래의 기사를 보았습니다.

서버측의 에러인 것과, 이 때 필자는 로컬로 밖에 개발을 실시하고 있지 않았기 때문에, rails의 기동의 로그를 확인하기로 했습니다

그러면 로그안에 아래와 같은 기재가 있어, 에러가 라우팅에 의한 것이라고 알았습니다.
# rails s したターミナルの画面

〜前略〜

[ActiveJob] Enqueued ActiveStorage::AnalyzeJob (Job ID: 88ca34c8-6291-4523-9bdc-8cb722868aa1) to Async(default) with arguments: #<GlobalID:0x00007fa8f12038b0 @uri=#<URI::GID gid://freemarket-sample62d/ActiveStorage::Blob/18>>
Completed 500 Internal Server Error in 67ms (ActiveRecord: 43.8ms)



ActionController::UrlGenerationError (No route matches {:action=>"edit", :controller=>"users"}, missing required keys: [:id]):

app/controllers/items_controller.rb:16:in `create'
  ActiveStorage::Blob Load (0.5ms)  SELECT  `active_storage_blobs`.* FROM `active_storage_blobs` WHERE `active_storage_blobs`.`id` = 18 LIMIT 1
  ↳ /Users/kontatomoya/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.2.4.1/lib/active_record/log_subscriber.rb:98

〜後略〜

3. 해결 방법



에러문을 발견한 뒤는 그 문언에 따라, 각자의 언어 환경에 적절한 방법으로 수정해 주시면 해결됩니다

덧붙여서 이번 필자의 에러의 경우는 복수의 테이블(item테이블, user테이블)의 user_id를 호출하는 기재를 할 때, 스트롱 파라미터를 사용해 items_controller로 user_id의 사용을 허가한 곳에서 만족해 버려, id 호출 의 설명을 잊어 버렸습니다. 따라서 localhost:300/users/nill/edit를 호출했습니다. 따라서 아래와 같이 create 액션을 수정하는 것으로, 이 에러는 나오지 않게 되었습니다.
class ItemsController < ApplicationController
〜中略〜
 def create
    @item = Item.new(item_params)
    if @item.save
      redirect_to  edit_user_path(@item.user_id) #この@item.user_idを記載していませんでした。

    else
      render :new
    end
  end
〜中略〜
def item_params
    params.require(:item).permit(:name,~省略~).merge(user_id: current_user.id)
    #↑この行でセキュリティ的にitems_controllerでのcurrent_user.idをuser_idとして使用許可をしていました
  end

4. 정리



이 오류의 원인을 규명하는 방법은 다른 언어로도 사용할 수 있다고 생각했기 때문에 제목에 rails를 넣지 않았습니다.

해결 방법은 각각의 언어나 프레임워크마다 다르다고 생각합니다만, 원인 규명에 대해서는 어느 언어에서도 동일하게 말할 수 있는 것이, "이 에러를 볼 때는 다시 한번 기동하고 있는 서버의 로그를 봐 주실 수 있습니다 하면 해결할 수 있다"는 것이 이번 기사의 주장이 됩니다.

뭔가 도움이 될 수 있다고 생각합니다.

좋은 웹페이지 즐겨찾기