iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 18
0
Modern Web

Rails guide / Ruby API study系列 第 18

[ Rails guide study ]Day 18 Rails 中的 public 檔案與捕捉例外

  • 分享至 

  • xImage
  •  

首先,來聽首歌吧
https://www.youtube.com/watch?v=o3mP3mJDL2k&list=PLkhh3Z0uci2ro3N18l9YzDp5_hn1jBEgI&index=8&t=0s
今天來拉丁一下吧!


public 檔案 (ex. 404 / 500 )

今天講到這篇的第 14 章

大家一定有經驗看到 404 Not Found 這幾個大字在你的螢幕上出現吧,我們今天要講的就跟這有關!

在 Rails 的系統中預設,如果有個遠端的 request 過來,但依循路徑找不到指定的網頁,會出現 "404 Not Found" 的頁面,如果是其他錯誤則會出現 "500 Server Error" 的頁面

那麼這些頁面藏在哪裡呢?請看下圖~

燈燈!答案揭曉!他們就藏在專案的 public 資料夾裡面

既然他們本身是檔案,表示你也可以客製化這些頁面的內容,讓別人進來你頁面找不到內容時不再是醜醜的 404 not found 幾個字而已了!


直接在網址加上 404 檔案的路徑可以直接連到頁面,不用更改 routes 檔案喔!也可以更改檔案裡面的內容

另外,在 public 資料夾的檔案有個特性是,不需要路徑設定就可以顯示出內容,為什麼要這樣設計呢?

想想以下情境:如果今天有個人要找頁面找不到,伺服器請他去找 404 頁面,結果又因為沒有設定 404 的路徑,又再次找不到頁面,伺服器又再請他去找 404 頁面... 這樣不就陷入了無窮迴圈了!?因此在 public 資料夾內的檔案才會設計成不需要路徑設定也能顯示內容!


Rescue

我們也可以盡量不讓這種伺服器錯誤發生,對可以預期到的錯誤或例外先捕捉做處理

使用的方式是把出現的錯誤訊息放在 rescue_from 後面,然後把要做的事情放在 with 這個 option 後面

#application_controller.rb
class ApplicationController < ActionController::Base
  rescue_from ActiveRecord::RecordNotFound, with: :not_found_site

  private
  def not_found_site
    render plain: "404 Not Found",
           status: :not_found
  end
end

在這例子中,使用一個方法接在 with 後面,除了方法外也是可以使用 Proc 喔!

參考資料:

Rails Guide

本文章同步分享於 http://anthonychao.site/


上一篇
[ Rails guide study ]Day 17 Basic / Digest HTTP Authentication
下一篇
[ Rails guide study ]Day19 什麼是 migration 檔案?
系列文
Rails guide / Ruby API study30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言