在 Production server(Ubuntu) 和开发环境 Mac 上用 rails s -e production 尝试切换到 production 模式 都报下面错误:
app/mailers/base_mailer.rb:3:in `<class:BaseMailer>': uninitialized constant BaseMailer::Setting (NameError)
请教各位,这一般是什么问题引起?
谢谢
查看一下环境配置,看看config/environments/production.rb是不是缺少 mailer 相关的配置
config/environments/production.rb
@Martin91 谢谢回复。已在 config/environments/production.rb 添加过了如下一些配置:
onfig.action_mailer.default_url_options config.action_mailer.delivery_method config.action_mailer.smtp_settings
#2 楼 @tomlive 具体配置的值是什么呢?
@Martin91 下面是配置值,谢谢。
config.action_mailer.default_url_options = { :host => 'example.com', } config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: 'smtp.gmail.com', port: 465, domain: 'gmail.com', user_name: 'demo', password: 'demppw', authentication: 'plain', enable_starttls_auto: true }
#4 楼 @tomlive 我自己照着你的配置在自己本地试了下,没有类似错误,能不能把你的 mailer 的代码也贴一下?
@Martin91 mailer 下的 app/mailers/base_mailer.rb
class BaseMailer < ActionMailer::Base default :from => Setting.email_sender default :charset => "utf-8" default :content_type => "text/html" default_url_options[:host] = Setting.domain layout 'mailer' helper :topics, :users end
#6 楼 @tomlive Setting是哪来的?如果是你自己定义的一个类或者模块,建议改为::Setting。因为 ruby 默认会在当前的 module 下边查找你要的 module,根据你的代码就是BaseMailer::Setting。
Setting
::Setting
BaseMailer::Setting
将 base_mailer.rb 清理后,问题解决,thanks @Martin91