[ruby-on-rails] Rails에서 다른 Rails 예외처럼 작동하도록 어떻게 예외를 발생 시키나요?

일반 Rails 예외와 동일한 작업을 수행하도록 예외를 발생시키고 싶습니다. 특히 개발 모드에서는 예외 및 스택 추적을 표시하고 프로덕션 모드에서는 “죄송합니다. 문제가 발생했습니다.”페이지를 표시합니다.

다음을 시도했습니다.

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

그러나 단순히 "ERROR signing up, group missing!"development.log 파일에 기록 합니다.



답변

특별한 조치를 취할 필요는 없습니다.

이 컨트롤러가있는 새로운 레일 앱이있는 경우 :

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

그리고 이동 http://127.0.0.1:3000/foo/

스택 추적에서 예외가 표시됩니다.

Rails (2.3 이후) 는 프레임 워크 자체에서 가져온 스택 추적에서 행을 필터링 하기 때문에 콘솔 로그에 전체 스택 추적이 표시되지 않을 수 있습니다 .

참조 config/initializers/backtrace_silencers.rb레일스 프로젝트에


답변

다음과 같이 할 수 있습니다.

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

여기서 수행하는 작업은 예외 역할을하는 “NotActivated”클래스를 만드는 것입니다. raise를 사용하면 “NotActivated”를 예외로 던질 수 있습니다. rescue_from은 지정된 메소드 (이 경우 not_activated)로 예외를 포착하는 방법입니다. 꽤 긴 예이지만 어떻게 작동하는지 보여줄 것입니다.

최고의 소원,
Fabian


답변

더 쉬운 방법이 필요하고 많은 소란을 원하지 않는 경우 간단한 실행은 다음과 같습니다.

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

이 예외가 발생합니다, 말 ee.message = something bad happened!

일반적으로 다른 모든 예외를 구할 때 구출 할 수 있습니다.


답변