部署 Production 部署问题

tomlive · 2014年01月07日 · 最后由 tomlive 回复于 2014年01月08日 · 2649 次阅读

在 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 相关的配置

@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

将 base_mailer.rb 清理后,问题解决,thanks @Martin91

需要 登录 后方可回复, 如果你还没有账号请 注册新账号