2017-02-24 1 views
1

내 컨트롤러에는 전자 메일을 작성하여 보내주는 섹션이 있지만이 기능은 프로덕션에서만 사용할 수 있어야합니다.Rails.env를 사용하는 다른 방법이 있습니까?

email = PortalEmail.new(params[:portal][:email]) if Rails.env.production? && PortalEmail.app_or_site?(@object) 

더 좋은 방법이 있나요? 아마도 구성/환경 폴더 내에 있습니까?

의견을 보내 주시면 감사하겠습니다.

답변

3

테스트 Rails.env.production?은 프로덕션 환경에서만 조건부로 코드를 실행하는 가장 단순하고 간결한 방법입니다.

그렇다면 컨트롤러에서 조건부 코드를 제거하고 프로덕션 환경 외부에서 전자 메일을 수신하도록 가짜 MTA를 구성해야합니다. 예를 들어 MailCatcher은 웹 기반 UI에서 검사 할 수 있도록 개발 환경에서 보낸 모든 메일을 "캐치"하여이를 보유 할 가짜 MTA를 제공합니다.

일반적으로 개발 환경에서 가짜 종속성을 사용하도록 조건부 환경 검사로 코드를 구성하는 것보다 응용 프로그램을 구성하는 것이 좋습니다.

1

나는이 같은 application.rb에 설정된 플래그를 사용하는 것을 선호 :

# application.rb 
config.can_send_mail = false 

# production.rb 
config.can_send_mail = true 

이 그런 환경에 대한 참조로 내 응용 프로그램 넘쳐 방지하기 위해

email = PortalEmail.new(params[:portal][:email]) if Rails.application.config.can_send_mail && PortalEmail.app_or_site?(@object) 

를 사용합니다. 이렇게하면 나중에 전자 메일을 보내야하는 새 환경 (예 : 준비 환경)을 나중에 추가 할 때 더 쉽게 사용할 수 있습니다.

+1

완벽한 솔루션. 나는 너에게 너무 감사한다! – essentialgreen

0

개발 모드로 실행할 때 letter_opener을 사용하면 브라우저에서 전자 메일을 미리 볼 수 있습니다.

그냥 개발 그룹 아래에 추가하고 당신은 다음과 같이 구성 할 수 있습니다 :

# config/environments/development.rb 

config.action_mailer.delivery_method = :letter_opener 

그리고 당신은 더 이상 그 조건이 필요하지 않습니다.

관련 문제