2013-08-29 3 views
0

메일러 기능을 포함하지 않는 페이지에서 radiant mailer extensionSystemStackError in SiteController#show_page을 실행하는 동안 문제가 발생했습니다. - 그런 정의가없는레일 process_without 메서드

Module MailerProcess 
    include RecaptchaMailer 

    def self.included(base) 
    base.class_eval { 
     alias_method_chain :process, :mailer 
     attr_accessor :last_mail 
    } 
    end 

    def process_with_mailer(request, response) 
    # If configured to do so, receive and process the mailer POST 
    if Radiant::Config['mailer.post_to_page?'] && ... 
     # here process_mail from RecaptchaMailer called - works fine 
    end 
    process_without_mailer(request, response) 
    end 
end 

그리고 여기 process_without_mailer이 날 완전히 혼란 것입니다 : 나는 문제를 casus 모듈이 있다는 것을 것을 발견했습니다. 이 방법은 실제로 로그에서 "SHOW TABLES"를 많이 발생시키고 마지막으로 예외를 발생시킵니다. 이 메소드는 레일스 부분이 더 많거나 적음을 의심합니다. 동일한 호출이 있기 때문입니다. actionpack-2.3.18/lib/action_controller/filters.rb (process_without_filters), rails-4.0.0/guides/source/active_support_core_extensions.md (process_without_stringified_params) - 이러한 방법에도 정의가 없습니다.

그래서, 두 가지 질문이 있습니다 :

process_with_mailer어떤 페이지로드 중에 호출되는 이유
  1. ?
  2. 뒤에 오는 마법은 무엇입니까 process_without_mailer?

는 UPD :

확인 방법 process_with_mailer을 주석하는 것은 시작하는 동안 오류가 있습니다 :

/home/sab/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-2.3.18/lib/active_support/core_ext/module/aliasing.rb:34:in `alias_method': undefined method `process_with_mailer' for class `Page' (NameError) 
     from /home/sab/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-2.3.18/lib/active_support/core_ext/module/aliasing.rb:34:in `alias_method_chain' 
     from /home/sab/_work/radiant-cms/vendor/extensions/mailer/lib/mailer_process.rb:6:in `block in included' 
     from /home/sab/_work/radiant-cms/vendor/extensions/mailer/lib/mailer_process.rb:5:in `class_eval' 

하는 것은 그래서 아마 alias_method_chain 방법 모든 페이지로드를 호출 원인,하지만 기계는 나에게 명확하지 않다. ActiveSuppor 의사를 찾았습니다.

UPD2 글쎄

  1. process_with_maileralias_method_chain을 주석 Ruby on Rails: alias_method_chain, what exactly does it do?
  2. 독서와 함께 끝났다. 해당 구성에서 전자 메일을 전송하므로 허용됩니다. 나는 아직도 작가의 일반적인 생각이 무엇인지 알고 싶다.
+0

모양을 보면, 'process_with_mailer'는 무한 재귀 루프에 걸려서 스택을 날려 버리게됩니다. 재귀 호출을 주석 처리하고 오류가 계속 표시 될 수 있습니까? – CuriousMind

+0

@Gaurish'process_without_mailer'에 주석 처리 : 'ERROR TypeError : Array를 문자열로 변환 할 수 없습니다. .../ruby-1.9.3-p448/gems/rack-1.1.6/lib/rack/handler/webrick. rb : 61 :'블록 서비스 중 ' .../ruby-1.9.3-p448/gems/actionpack-2.3.18/lib/action_controller/response.rb : 155 :'each'에 .../ruby-1.9.3-p448/gems/actionpack-2.3.18/lib/action_controller/response.rb : 155 :'each '에 각각 .../ruby-1.9.3-p448/gems/actionpack-2.3.18 /lib/action_controller/string_coercion.rb:16:in'method_missing ' .../ruby-1.9.3-p448/gems/actionpack-2.3.18/lib/action_controller/reloader.rb : 22 :'method_missing'에 있습니다. ' – sab

답변

0

실제로 이것을 얻을 때까지 alias_method_chain에 대한 기사를 다시 읽으십시오. 그것은 실제로 process이 호출 될 때마다 process_with_mailer을 트리거하는 것입니다.

process_with_mailer과 을 주석 처리하면이 코드가 다시 트리거되지 않으므로이 코드가 파손되었습니다. 전자 메일이 현재 전송되는 이유는 메일러 확장자가 두 가지 방법으로 설정 될 수 있기 때문입니다.

  • Radiant::Config['mailer.post_to_page?']true 인 경우 메일 양식을 현재 URL에 게시합니다. 예 : 그것은 domain.tld/contact에 게시하고 Radiant는 그 경로에서 페이지를 찾아서 처리합니다. alias_method_chain 덕분에 양식이 방금 게시되었는지 확인한 다음 실제로 메일을 보내야합니다.
  • Radiant::Config['mailer.post_to_page?']이 true가 아니거나 설정되지 않은 경우 연락처 양식은 domain.tld/pages/: id/mail과 같은 형식으로 게시됩니다. 이 요청은 Radiant의 SiteController에 의해 처리되지 않고 process_with_mailer를 사용하지 않는 MailController에 의해 처리됩니다. alias_method_chain을 주석 처리 한 후 이메일이 제대로 발송되었다고 말하면서 두 번째 문제가 발생했습니다.

는 정확히 SystemStackError이 더 완전한 오류 메시지없이 말을하기 어렵다 발생,하지만 (activesupport-2.3.18 대의가), 당신은 1.1.3 복사와 함께이 확장을 사용하려고 붙여 넣은 것을에서 판단, 4 년 후에 업데이트되지는 않습니다. recaptcha 기능을 실제로 사용합니까? 그렇지 않다면, 나는이 포크를 떨어 뜨리고 다음을 기반으로하는 '일반'메일러 확장을 사용한다고 말할 것입니다 : https://github.com/radiant/radiant-mailer-extension

+0

훌륭한 답변, thx! 당신은/페이지/아이디/메일보다 더 나은 URL로 게시 할 수있는 능력이 떨어질 것이라는 나의 의문을 확인했습니다. 당신은 정확한 recapthca 포크를 실제로 사용하고 있습니다, 나는 또한 스택 오버 플로우가 지속되는 깨끗한 메일러 확장으로 테스트했습니다. 그것은 1 년 또는 2 년 동안 업데이 트되지 않았습니다 ... 여전히, 나는 captcha가 필요하고 그것이 실제로는 두 가지 또는 세 줄의 코드가 다르다는 것을 알 수 있습니다. 그래서 더 나은 경우 '정상적인'가지를 수정할 수 있습니다. 상태. – sab

+0

필자는 메일러 확장 프로그램을 정기적으로 사용하며 Radiant의 최신 1.x 릴리즈에서 계속 작동한다는 것을 확신 할 수 있습니다. 아마도 다른 곳에서 원인을 찾아야 할 것입니다. 즉 유효한 '메일러'부분 등이 있습니까? 당신이 얻는 전체 오류를 게시 할 수 있습니까? –

+0

불행히도 다시 재현 할 시간이 없으므로 조사를 위해 실제로 방향을 지적하므로 답변을 수락하겠습니다. – sab