Saya ingin meningkatkan pengecualian sehingga itu melakukan hal yang sama seperti pengecualian Rails normal. Secara khusus, tampilkan pengecualian dan pelacakan tumpukan dalam mode pengembangan dan tampilkan halaman "Maaf, ada yang tidak beres" dalam mode produksi.
Saya mencoba yang berikut ini:
raise "safety_care group missing!" if group.nil?
Tapi itu hanya menulis "ERROR signing up, group missing!"
ke file development.log
ruby-on-rails
exception
exception-handling
Chirag Patel
sumber
sumber
Jawaban:
Anda tidak perlu melakukan sesuatu yang istimewa, itu seharusnya berhasil.
Ketika saya memiliki aplikasi rel baru dengan pengontrol ini:
class FooController < ApplicationController def index raise "error" end end
dan pergi ke
http://127.0.0.1:3000/foo/
Saya melihat pengecualian dengan jejak tumpukan.
Anda mungkin tidak melihat seluruh pelacakan tumpukan di log konsol karena Rails (sejak 2.3) memfilter garis dari pelacakan tumpukan yang berasal dari kerangka itu sendiri.
Lihat
config/initializers/backtrace_silencers.rb
di proyek Rails Andasumber
Anda bisa melakukannya seperti ini:
class UsersController < ApplicationController ## Exception Handling class NotActivated < StandardError end rescue_from NotActivated, :with => :not_activated def not_activated(exception) flash[:notice] = "This user is not activated." Event.new_event "Exception: #{exception.message}", current_user, request.remote_ip redirect_to "/" end def show // Do something that fails.. raise NotActivated unless @user.is_activated? end end
Apa yang Anda lakukan di sini adalah membuat kelas "NotActivated" yang akan berfungsi sebagai Pengecualian. Dengan menggunakan kenaikan, Anda dapat menampilkan "NotActivated" sebagai Pengecualian. rescue_from adalah cara menangkap Exception dengan metode tertentu (not_activated dalam kasus ini). Contoh yang cukup panjang, tetapi harus menunjukkan cara kerjanya.
Semoga sukses,
Fabian
sumber
Jika Anda membutuhkan cara yang lebih mudah untuk melakukannya, dan tidak ingin banyak keributan, eksekusi sederhana dapat berupa:
raise Exception.new('something bad happened!')
Ini akan menimbulkan pengecualian, katakanlah
e
dengane.message = something bad happened!
dan kemudian Anda dapat menyelamatkannya saat Anda menyelamatkan semua pengecualian lainnya secara umum.
sumber