2012-02-23 15 views
6

Tôi muốn lưu trữ thông tin tài khoản email trong tệp config.yml. Tôi đang tải thông tin đó vào một hằng số trong tệp cấu hình Rails/initializers theo một mẫu phổ biến mà tôi đã xem trực tuyến và được phác thảo at this RailsCast. Tôi đang cố gắng thiết lập mặc định cho Action Mailer bằng cách sử dụng config.action_mailer.smtp_settings bên trong tệp config/application.rb, theo ví dụ trên Mat Harvard's Blog. Tôi tiếp tục nhận được lỗi liên tục chưa được khởi tạo khi khởi động máy chủ đường ray của mình. Tôi giả sử rằng application.rb đang được gọi trước khi config/initializers. Có một vị trí khác mà tôi có thể đặt config.action_mailer.smtp_settings trong khi khởi động hay không, nhưng sau khi cấu hình/initializers chạy?Làm thế nào để thiết lập mặc định Mailer hành động sau khi config/initializers chạy?

Cập nhật: Tôi có thể không rõ ràng trong bài đăng/câu hỏi ban đầu của mình. Tôi đang đọc tập tin config.yml trong một initializer. Tệp cấu hình này lưu trữ thông tin tài khoản email như tên người dùng và mật khẩu. Tôi không muốn đưa thông tin này (tên người dùng và mật khẩu) vào tệp application.rb hoặc environment.rb. Tôi đã thử di chuyển mã của tôi vào tập tin environment.rb, nhưng gặp phải lỗi liên tục uninitialized khi bắt đầu đường ray.

Mã của tôi để thiết lập các thiết lập bưu phẩm hành động trông như thế này:

config.action_mailer.smtp_settings = { 
    :address    => APP_CONFIG[:email_config][:address], 
    :port     => APP_CONFIG[:email_config][:port], 
    :domain    => APP_CONFIG[:email_config][:email_domain], 
    :user_name   => APP_CONFIG[:email_config][:user_name], 
    :password    => APP_CONFIG[:email_config][:password], 
    :authentication  => :plain, 
    :enable_starttls_auto => true 
    } 

    config.action_mailer.default_url_options = { 
    :host => APP_CONFIG[:email_config][:host] 
    } 

Tôi đang đọc từ tập tin config.yml thiết hằng APP_CONFIG trong một initializer load_config.rb. tệp có chứa 2 dòng dưới đây:

raw_config = File.read(RAILS_ROOT + "/config/config.yml") 
APP_CONFIG = YAML.load(raw_config)[RAILS_ENV] 

Trả lời

0

Một initializer lẽ không phải là nơi phù hợp với thông tin này, ít nhất là không trong Rails 3. Sau khi hướng dẫn trong official ActionMailer guide, tôi sẽ đưa các thông tin trong môi trường tập tin - Tôi đoán định nghĩa của các hằng số sẽ thay đổi tùy thuộc vào môi trường bạn đang ở, và điều này sẽ có tác dụng tương tự. Vì vậy, trong cấu hình/môi trường/production.rb:

config.action_mailer.delivery_method = :smtp 
config.action_mailer.smtp_settings = { 
    :address    => "smtp.gmail.com", 
    :port     => 587, 
    :domain    => 'baci.lindsaar.net', 
    :user_name   => '<username>', 
    :password    => '<password>', 
    :authentication  => 'plain', 
    :enable_starttls_auto => true } 

Không được đánh cắp từ hướng dẫn tôi vừa tham chiếu.

+2

Tôi đang cố gắng để tránh đặt tên người dùng và mật khẩu ở một trong hai application.rb hoặc các tập tin environment.rb. Tôi đã cập nhật câu hỏi/bài đăng gốc của mình để bao gồm các mẫu mã. Mã cấu hình bạn đã cung cấp ở trên không có trong trình khởi tạo - nó nằm trong application.rb. Chỉ cần mã để đọc trong tập tin config.yml của tôi là trong initializer. –

+0

Vì vậy, Bạn đã nhận được bộ khởi tạo để tải trước khi bạn tập tin môi trường? – xecutioner

4

Bạn có thể đặt một cái gì đó như thế này trong một initializer:

ActionMailer::Base.default_url_options = { :host => 'mysite.com' } 
Các vấn đề liên quan