আমি কীভাবে রেলগুলিতে ব্যতিক্রম বাড়াতে পারি যাতে এটি অন্যান্য রেলের ব্যতিক্রমের মতো আচরণ করে?


92

আমি একটি ব্যতিক্রম বাড়াতে চাই যাতে এটি একই কাজটি করে যা একটি সাধারণ রেল ব্যতিক্রম does বিশেষত, ব্যতিক্রমগুলি দেখান এবং বিকাশ মোডে স্ট্যাক ট্রেস এবং উত্পাদন মোডে "আমরা দুঃখিত, তবে কিছু ভুল হয়ে গেছে" পৃষ্ঠাটি দেখান।

আমি নিম্নলিখিত চেষ্টা করেছিলাম:

raise "safety_care group missing!" if group.nil?

তবে এটি কেবল विकास.লগ "ERROR signing up, group missing!"ফাইলটিতে লিখে দেয়


4
আপনার পোস্ট করা ত্রুটি বার্তাটি এই ব্যতিক্রম থেকে আসে না বলে মনে হচ্ছে (এটি ভিন্ন বার্তা) আপনি যা দেখছেন এটি কি এটিই সত্যই?
লেভিনেলেেক্স

উত্তর:


140

আপনাকে বিশেষ কিছু করতে হবে না, এটি কেবল কাজ করা উচিত।

যখন এই নিয়ামকটির সাথে আমার একটি নতুন রেল অ্যাপ থাকে:

class FooController < ApplicationController
  def index
    raise "error"
  end
end

এবং যাও http://127.0.0.1:3000/foo/

আমি স্ট্যাক ট্রেস সহ ব্যতিক্রমটি দেখছি।

আপনি হয়ত কনসোল লগের পুরো স্ট্যাকট্রেসটি দেখতে পাবেন না কারণ ফ্রেইল থেকেই স্ট্যাক ট্রেস থেকে রেইলগুলি (২.৩ থেকে) লাইনগুলি ফিল্টার করে।

দেখুন config/initializers/backtrace_silencers.rbআপনার পাগল প্রকল্পে


4
দুর্দান্ত, সংক্ষিপ্ত উত্তর।
আরসিডি

4
স্কিচ লিঙ্ক (একটি স্ট্যাক ট্রেস সহ ব্যতিক্রম দেখে) আর কাজ করছে না
আসফ

@ লেবিনেলেক্স এই স্ট্যাকট্রেসটি দেখাতে উত্পাদন মোডে নিরাপদ হবে?
বিকেএসপুরগাঁও

@ লিভেলেনেক্স - আপনাকে ধন্যবাদ অ্যালেক্স ত্রুটি বার্তায় কাস্টম স্ট্রিং যুক্ত করার কোনও উপায় আছে?
বিকেএসপুরগাঁও

63

আপনি এটি এর মতো করতে পারেন:

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

আপনি এখানে যা করছেন তা একটি ক্লাস "নোট অ্যাক্টিভেটেড" তৈরি করছে যা ব্যতিক্রম হিসাবে কাজ করবে। উত্থাপন ব্যবহার করে, আপনি ব্যতিক্রম হিসাবে "নোট অ্যাক্টিভেটেড" নিক্ষেপ করতে পারেন। রেসকিউ_ফর্ম একটি নির্দিষ্ট পদ্ধতি (এই ক্ষেত্রে not_ ਐਕটিভেটেড) দিয়ে একটি ব্যতিক্রম ধরা উপায়। বেশ দীর্ঘ উদাহরণ, তবে এটি কীভাবে কাজ করে তা আপনাকে দেখাতে হবে।


শুভকামনা , ফ্যাবিয়ান


এটি বিকাশ মোডে ব্যতিক্রম এবং স্ট্যাক ট্রেস প্রদর্শন করে না এবং উত্পাদন মোডে "আমরা দুঃখিত, তবে কিছু ভুল হয়ে গেছে" পৃষ্ঠাটি দেখায় না।
চিরাগ প্যাটেল

4
"আমরা দুঃখিত" পৃষ্ঠাটি আসলে আপনার ওয়েব সার্ভারের 500 ত্রুটি হ্যান্ডলার। আপনার .htaccess ফাইলটি পরীক্ষা করুন এবং আপনি এটি সেখানে সাধারণত দেখতে পাবেন
জেফ প্যাকেট

ওপি-র উত্তর নাও হতে পারে তবে খুব দরকারী উদাহরণ, ধন্যবাদ!
নীল স্টকব্রিজ

12

আপনার যদি এটি করার সহজ উপায়ের প্রয়োজন হয় এবং খুব বেশি হট্টগোল না চান তবে একটি সাধারণ সম্পাদন হতে পারে:

raise Exception.new('something bad happened!')

এটি একটি ব্যতিক্রম বাড়াবে, eসাথে বলুনe.message = something bad happened!

এবং তারপরে আপনি সাধারণভাবে অন্যান্য সমস্ত ব্যতিক্রমগুলি উদ্ধার করায় আপনি এটি উদ্ধার করতে পারেন।


'ব্যাতিক্রম' নিজেই বাড়াতে বা উদ্ধার করা ভাল ধারণা নয়, পরিবর্তে স্ট্যান্ডার্ডেরর ব্যবহার করার চেষ্টা করুন। : বিস্তারিত জানার জন্য এই দেখুন stackoverflow.com/questions/10048173/...
Ekamjit সিং
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.