Ruby on rails Rails应用程序在下订单和更改交付状态后不发送电子邮件,只是出现故障

Ruby on rails Rails应用程序在下订单和更改交付状态后不发送电子邮件,只是出现故障,ruby-on-rails,ruby,email,actionmailer,vps,Ruby On Rails,Ruby,Email,Actionmailer,Vps,我在建一家电子商店。客户可以购买物品,交易通过braintree进行,没有任何问题 但是当客户下订单时……事情就糟了。。。应用程序中断 rails给出了一个错误页面“很抱歉,出了点问题。” 这是来自服务器的.log I, [2017-05-19T22:23:10.127481 #22752] INFO -- : Completed 500 Internal Server Error in 2695ms (ActiveRecord: 7.7ms) F, [2017-05-19T22:23:

我在建一家电子商店。客户可以购买物品,交易通过braintree进行,没有任何问题

但是当客户下订单时……事情就糟了。。。应用程序中断

rails给出了一个错误页面“很抱歉,出了点问题。”

这是来自服务器的
.log

   I, [2017-05-19T22:23:10.127481 #22752]  INFO -- : Completed 500 Internal Server Error in 2695ms (ActiveRecord: 7.7ms)
F, [2017-05-19T22:23:10.129139 #22752] FATAL -- :
Errno::ECONNREFUSED (Connection refused - connect(2) for nil port 587):
  app/controllers/orders_controller.rb:35:in `create'
这是订单控制器.rb
第35行是OrderNotifier.received(@order.deliver)

class OrdersController < ApplicationController

include CurrentCart
before_action :set_cart, only: [:new, :create]
before_action :set_order, only: [:show, :edit, :destroy]

def index
    @orders = Order.all? 
end

def new
    @images  = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg"]
 @random_no = rand(5)
 @random_image = @images[@random_no]

    if @cart.product_items.empty?
        redirect_to root_url, notice: 'Your Cart is Empty'
        return

    end
    @order = Order.new
    @client_token = Braintree::ClientToken.generate

    @del_cost_euro = 20
end

def create
    @order = Order.new(order_params)
    if @order.save
        charge
        if @result.success?
            @order.add_product_items_from_cart(@cart)
        Cart.destroy(session[:cart_id])
        session[:cart_id] = nil
        OrderNotifier.received(@order).deliver  #this is line 35
        redirect_to root_url, notice: 'Thank You for Your Order'
        else
            flash[:error] = 'Please Check Your Cart'
            redirect_to root_url, alert: @result.message
            @order.destroy
        end
    else
        @client_token = Braintree::ClientToken.generate
        render :new
    end
end


def show

end


def destroy
    @order.destroy
    redirect_to root_url, notice: 'Order deleted'
end

private

def set_order
    @order = Order.find(params[:id])
end

def order_params
    params.require(:order).permit(:name, :email, :address, :city, :country, :pick_up, :delivery)
end

def charge
    @result = Braintree::Transaction.sale(
        amount: @cart.total_price_usd,
        payment_method_nonce: params[:payment_method_nonce] )
end

end
同样,这种破坏与邮件的发送有关

这是
app/admin/order.rb

    ActiveAdmin.register Order do

    permit_params :shipped

    after_update do |order|
        OrderNotifier.shipped(@order).deliver if order.shipped # Again the error is happening in the OrderNotifier

    end

    show do |order|

        panel 'Customer Details' do
            attributes_table_for order, :name, :email, :address, :city, :country, :created_at
        end

        panel 'Created ' do
            "#{time_ago_in_words order.created_at} ago"
        end


        panel 'Shipped ' do
            order.shipped
        end

        panel 'Order Details' do
            table_for(order.product_items) do 
                column 'Product' do |item|
                    item.product.title
                end
                column 'Quantity' do |item|
                    item.quantity
                end
                column 'Price Isl' do |item|
                    number_to_currency item.total_price_isl
                end
                column 'Price USD' do |item|
                    number_to_currency item.total_price_usd
                end
            end
        end

        panel 'Order Total USD' do 
            number_to_currency order.total_price_usd

        end

        panel 'Order Total Iskr' do 
            number_to_currency order.total_price_isl

        end

    end


end
    Rails.application.configure do
     config/application.rb.    
  config.cache_classes = true
  config.eager_load = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
  config.assets.js_compressor = :uglifier

  config.assets.compile = true

  config.assets.digest = true
  config.assets.initialize_on_precompile = false

  config.log_level = :debug

  config.i18n.fallbacks = true

  config.active_support.deprecation = :notify

  config.log_formatter = ::Logger::Formatter.new

  config.active_record.dump_schema_after_migration = false

  config.action_mailer.default_url_options = { host: 'hlinreykdal.com'}
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: ENV["SMTP_ADDRESS"],
    user_name: ENV["SMTP_USER"],
    password: ENV["SMTP_PASSWORD"],
    domain: "hlinreykdal.com",
    port: 587,
    authentication: :login,
    enable_starttls_auto: true
  }

    Braintree::Configuration.environment = :production
    Braintree::Configuration.merchant_id = ENV['merchant_id']
    Braintree::Configuration.public_key = ENV['public_key']
    Braintree::Configuration.private_key = ENV['private_key']

end
下面是
app/mailers/order\u通知程序

 class OrderNotifier < ApplicationMailer

  default from: 'Hlín Reykdal Concept Store <store@hlinreykdal.com>'

  def received(order)
    @order = order

    mail to: order.email, subject: 'Hlín Reykdal Concept Store'
  end


  def shipped(order)
   @order = order

    mail to: order.email, subject: 'Order Shipped'
  end
end

端口587通常是为SMTP保留的,因此您是对的:这与电子邮件有关:听起来好像配置的SMTP服务器没有启动并接受连接。解决这个问题,这个错误就会消失。

好的,谢谢,然后我可以在VPS上安装类似于
Postfix
的东西吗?我以为这是全自动的,因为邮件是通过谷歌套装发送的\_(ツ)_/''我什么都用a。我也用Rails的东西。这比浪费时间戳AWS要容易得多。另外,使用
延迟作业
或其他类似的gem来异步发送电子邮件,避免出现影响用户体验的错误/异常。好吧……谢谢……我做了一些挖掘……是否可能digitalOcean正在阻止587端口?在l照这个吃
    Rails.application.configure do
     config/application.rb.    
  config.cache_classes = true
  config.eager_load = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
  config.assets.js_compressor = :uglifier

  config.assets.compile = true

  config.assets.digest = true
  config.assets.initialize_on_precompile = false

  config.log_level = :debug

  config.i18n.fallbacks = true

  config.active_support.deprecation = :notify

  config.log_formatter = ::Logger::Formatter.new

  config.active_record.dump_schema_after_migration = false

  config.action_mailer.default_url_options = { host: 'hlinreykdal.com'}
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address: ENV["SMTP_ADDRESS"],
    user_name: ENV["SMTP_USER"],
    password: ENV["SMTP_PASSWORD"],
    domain: "hlinreykdal.com",
    port: 587,
    authentication: :login,
    enable_starttls_auto: true
  }

    Braintree::Configuration.environment = :production
    Braintree::Configuration.merchant_id = ENV['merchant_id']
    Braintree::Configuration.public_key = ENV['public_key']
    Braintree::Configuration.private_key = ENV['private_key']

end