傑克達與瑞兒絲的大小事

快速筆記整理網站開發上碰到的各種技巧和問題,免得年紀大忘光,至少還有一個地方可以查找

Tag Archives: Error

Rails 專案遇到錯誤時,如何執行發信通知功能 (進階)

接續剛剛提到的專案遇到錯誤執行發信通知功能,如果有一些額外的資訊需要表達在信件中時,該怎麼做呢?

貼心的 exception_notification_rails3 另外有提供了一個 data 的 section 可以讓使用者自訂訊息內容

使用方法:

1. 開啟剛剛在 config/environments/production.rb 的設定,加上粗體表示的那行文字

config.middleware.use ::ExceptionNotifier,
:email_prefix => "[ERROR] ",
:sender_address => %{"Notifier" <notifier@yourdomain.com> },
:exception_recipients => %w{exceptions@yourdomain.com},
:sections => %w(data request session environment backtrace)

2. 接下來要自訂訊息內容,開啟 app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
before_filter :authenticate
before_filter :set_exception_data
...
def set_exception_data
# used for exception notification
user = User.current
return true if user.nil?
user_info = "名字: #{user.display_name}, 電子郵件: #{user.mail}, 部門: #{user.department}"
env['exception_notifier.exception_data'] = { :data=>{ :user => user_info , :deploy => Rails.env } }

true
end

3. 設定完成,之後便會在錯誤信件中看到定義的內容,結果如下:

-------------------------------
Data:
-------------------------------
* user: 名字: 小王, 電子郵件: smallwang@yourdomain.com, 部門: 資訊部
* deploy: production

參考文章:

http://qa.taobao.com/?p=13030

廣告

Rails 專案遇到錯誤時,如何執行發信通知功能

最近在專案上遇到一個需求,也就是當 Rails 專案在線上環境遇到錯誤時,要能發信通知開發者,方便快速反應修正問題。透過咕歌大神搜尋後,找到幾個解決方案,其中利用 exception_notification_rails3 gem 看來是最佳的解法,趕快筆記一下

使用方法:

1. 修改 Gemfile,加入以下指令

$ gem 'exception_notification_rails3', '~> 1.2.0', :require => 'exception_notifier'

2. 設定完成後,請執行 bundle 安裝 gem

$ bundle

3. 因為只針對線上 production 的環境才需要執行發信操作,所以開啟 config/environments/production.rb 加入以下設定

config.middleware.use ::ExceptionNotifier,
:email_prefix => "[ERROR] ",
:sender_address => %{"Notifier" <notifier@yourdomain.com> },
:exception_recipients => %w{exceptions@yourdomain.com}

email_prefix: 信件主旨的前綴詞,可自行定義
sender_address: 信件的寄件者
exception_recipients: 信件的收件者,如果有多個收件者,記得用空白隔開,如: %w{abc@yourdomain.com xyz@yourdomain.com}

附註:

如果你希望在 development 和 production 二個環境下都要能收到錯誤通知,可以直接在 config/applicaiton.rb 加入設定

參考文章:

https://github.com/rails/exception_notification

http://ryanwilliams.org/2010/Nov/04/exception-notification-in-rails-3

 

Undefined local variable or method `unconfirmed_email’ 錯誤解決

安裝 devise gem ,新增一筆 User 資料時,頁面出現

NameError in Devise::RegistrationsController#create

undefined local variable or method `unconfirmed_email’ for #<User:0x00000101a7dd28>

發生原因:

unconfirmed_email is required for reconfirmable. For some reason this was enabled by default in config/intializers/devise.rb:

config.reconfirmable = true

unconfirmed_email 欄位是針對 email 重新認證的必要欄位,預設 reconfirmable = true ,是表示當 email 欄位被修改後需要再重新認證,先將新的 email 記錄在 unconfirmed_email 欄位裡,直到完成認證,才會將 unconfirmed_email 記錄的 email 複製到 email 欄位

User 資料表中必須對應增加 unconfirmed_email 欄位,可參考透過 devise 生成的 migration

解決方法:

因為我只是需要 email 做為我的帳號,不會有變更發生,也就不會有再次認證的情況,所以將 config.reconfirmable 改為 false 就好,如下:

config.reconfirmable = false

參考文章:

http://stackoverflow.com/questions/9049151/undefined-local-variable-or-method-unconfirmed-email-when-registering-users