2012-06-08 2 views
1

첫 번째 요청에서 사용자가 설치 프로그램 구성 마법사로 연결되는 레일스 애플리케이션을 만들고 싶습니다. 이 마법사에서는 ActionMailer가 사용할 이메일 설정을 구성해야합니다. SMTP 서버 설정/자격 증명.레일을 통해 런타임에 ActionMailer를 구성 할 수 있습니다.

프로그래밍 방식으로 ActionMailer의 구성 항목을 업데이트 할 수 있습니까 (Application.rb를 업데이트해야한다고 가정)?

ActionMailer에서 업데이트 된 구성 설정을 다시로드하도록하려면 어떻게해야합니까? 이러한 설정 중 많은 부분이 응용 프로그램 시작/초기화에로드되고 이러한 변경 사항을 적용하려면 Rails 응용 프로그램을 다시 시작하지 않으려 고합니다.

+0

그것은 분명되지 않았을 수 있습니다, 사용자에 의해 주어진 이러한 SMTP 설정은 다음 응용 프로그램에서 글로벌 SMTP 설정으로 사용한다 . 사용자가 사이트 전체 구성을 설정할 수 있습니다. – KrisG

답변

7

그냥 저장소 세션으로 설정하고 AC에 대한 필터 전에 내부를 수행

class ApplicationController < ActionController::Base 

    before_filter :set_mailer_settings 

    private 

     def set_mailer_settings 

     ActionMailer::Base.smtp_settings = { 
      :address => session[:smtp_address], 
      :port => session[:smtp_port], 
      :domain => session[:smtp_domain], 
      :authentication => session[:smtp_authentication], 
      :user_name => session[:smtp_user_name], 
      :password => session[:smtp_password] 
     } 

     end 

end 
+1

세션보다 영구적으로 저장하고 싶지 않습니까? ActionMailer를 모든 컨트롤러에 대한 모든 요청에 ​​설정하는 것만 큼 비효율적이지 않은가? 사실 ActionMailer를 몇 곳에서 사용할 것인데, 일반적으로 백그라운드 프로세스에서 호출된다. – KrisG

+0

@KrisG 그건 일반적인 문제입니다 - AC의 필터가 설정을하기에 좋은 장소가 아니기 전에, 다른 해결책은 모르겠지만 ... 세션 대신 데이터베이스에 설정을 저장할 수 있습니다. 방금 샘플을 만들었습니다. – ABrukish

관련 문제