15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

500 (Internal Server Error)の解決方法

Last updated at Posted at 2020-03-09

#1.エラーの発見の経緯とエラーの様子
画像の保存の可否を検証ツールで確認していたところコンソールの部分に下記のような記載が出てきました
スクリーンショット 2020-03-09 21.08.10.png

#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 と入れませんでした。

解決方法はそれぞれの言語やフレームワークごとに異なると思いますが、こと原因究明についてはどの言語でも等しく言えるのが、"このエラーを見かけた際はもう一度起動しているサーバーのログを見ていただければ解決できる"というのが今回の記事の主張になります。

何かの参考にしていただければと思います

15
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?