Devise Confirmable继续在生产模式下发送到localhost:3000

时间:2014-05-07 06:18:02

标签: ruby-on-rails heroku devise devise-confirmable

我已成功通过Facebook身份验证设置Devise Confirmable,一切都在开发模式下完美运行。当我推送到heroku并在生产模式下运行时,应用程序会发送一封电子邮件,但链接会将我发送到:

http://localhost:3000/users/confirmation?confirmation_token=E2jH_ehmHwqy2zyvJGcs

如果我用我的应用名称替换localhost:3000一切正常。

在我的config / environments / production.rb文件中,我有以下代码:

config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true 

config.action_mailer.smtp_settings = {
  :address => "smtp.gmail.com",
  :port => 587,
  :domain => "gmail.com",
  :user_name => ENV["GMAIL_USERNAME"],
  :password => ENV["GMAIL_PASSWORD"],
  :authentication => :plain,
  :enable_starttls_auto => true 
}
config.action_mailer.default_url_options = { :host => 'http://myapp.herokuapp.com' }

在我的发展中,我有:

config.action_mailer.raise_delivery_errors = true

config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true 
config.action_mailer.default_url_options = { :host => 'http://localhost:3000' }
config.action_mailer.smtp_settings = {
  :address => "smtp.gmail.com",
  :port => 587,
  :domain => "gmail.com",
  :user_name => ENV["GMAIL_USERNAME"],
  :password => ENV["GMAIL_PASSWORD"],
  :authentication => :plain,
  :enable_starttls_auto => true 
}

有关该怎么做的任何想法?我无法在任何地方找到直接答案。

我正在使用rails 4&设计3.2.4

3 个答案:

答案 0 :(得分:1)

试试这个。

config.action_mailer.default_url_options = { host => 'your.herokuapp.com' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address: "smtp.gmail.com",
  port: 587,
  domain: "gmail.com",
  Authentication: "plain",
  enable_starttls_auto: true,
  user_name: your_username,
  password: your_password
}
config.action_mailer.perform_deliveries = true

答案 1 :(得分:0)

production.rb添加default_url_options之前 smtp设置以及host不应包含http://,只需编写域名,即,myapp.herokuapp.com

config.action_mailer.default_url_options = { :host => 'myapp.herokuapp.com' }
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "gmail.com",
:user_name => ENV["GMAIL_USERNAME"],
:password => ENV["GMAIL_PASSWORD"],
:authentication => :plain,
:enable_starttls_auto => true 
}

答案 2 :(得分:0)

主机值正在您的应用程序中的某处写入。开始的好地方是初始化程序目录。如其他地方所述,请在初始化程序下检查setup_mail.rb。

转到Rails控制台并检查输出:

ActionMailer::Base.default_url_options[:host]