在生产中的Rails中,POST请求(本地工作)后重定向是错误的

时间:2016-12-18 22:50:34

标签: ruby-on-rails ruby heroku

我正在尝试使用用户输入的电子邮件地址,将其存储在数据库中,然后向该地址发送欢迎电子邮件。如果成功,则应将用户重定向回root。在本地这种情况正确发生,但在我的Heroku生产服务器上,地址将保存在数据库中,但用户将被重定向回subscribers。这是用于保存订户的API调用,但它没有相应的视图。

此电子邮件也未发送,但这可能是一个单独的问题。如果重要,我正在尝试使用MailGun发送电子邮件。

我不确定哪些文件是必要的,但是......

routes.rb中:

Rails.application.routes.draw do
  root to: 'pages#home'
  resources :subscribers, only: :create
end

/controllers/subscribers_controller.rb:

class SubscribersController < ApplicationController
  def new
    @subscriber = Subscriber.new
  end

  def create
    @subscriber = Subscriber.new(subscriber_params)
    if @subscriber.save
      SubscribeMailer.subscribe_email(@subscriber).deliver
      flash[:success] = "Success! Check your email."
      redirect_to root_path
    else
      flash[:danger] = "Oops! That's not a valid email."
      redirect_to root_path
    end

  end

  private
    def subscriber_params
      params.require(:subscriber).permit(:email)
    end

end

/models/subscriber.rb:

class Subscriber < ActiveRecord::Base
  validates_email_format_of :email, uniqueness: true
end

/mailers/subscriber_mailer.rb:

class SubscribeMailer < ActionMailer::Base
  default from: "email@gmail.com"
  def subscribe_email(subscriber)
    mail(to: subscriber.email, subject: 'Subject')
  end
end

/config/environment.rb:

# Load the Rails application.
require File.expand_path('../application', __FILE__)

# Initialize the Rails application.
Rails.application.initialize!

ActionMailer::Base.smtp_settings = {
  :port           => ENV['MAILGUN_SMTP_PORT'],
  :address        => ENV['MAILGUN_SMTP_SERVER'],
  :user_name      => ENV['MAILGUN_SMTP_LOGIN'],
  :password       => ENV['MAILGUN_SMTP_PASSWORD'],
  :domain         => 'subdomain.herokuapp.com',
  :authentication => :plain,
}
ActionMailer::Base.delivery_method = :smtp

在查看其他一些StackOverflow线程时,OP被要求提供prod日志。我跑了heroku logs,但没有看到任何突出的东西。

1 个答案:

答案 0 :(得分:0)

我终于明白了。我正在使用沙箱域用于Mailgun,我测试的电子邮件与我通过Mailgun授权使用的电子邮件不同。