Errno :: ECONNREFUSED在OrdersController #create中

时间:2011-08-11 22:35:32

标签: ruby-on-rails ruby

好的,Rails noob问一个问题。我在这里第一次尝试做Rails。我正在阅读Agile Web Dev with Rails 4th ed。我的生产箱上出现了这个错误。 这在webrick下的开发模式下工作,我收到一封发送到我的gmail帐户和evrything的电子邮件但是在我的生产模式的apache框中我收到此错误...

Errno::ECONNREFUSED in OrdersController#create
Connection refused - connect(2)

应用程序跟踪是......

app/controllers/orders_controller.rb:58:in `create'
app/controllers/orders_controller.rb:54:in `create'

这里是app / controllers / order_controller.rb中的def创建

def create
@order = Order.new(params[:order])
@order.add_line_items_from_cart(current_cart)

respond_to do |format|  #THIS IS LINE 54
  if @order.save
    Cart.destroy(session[:cart_id]) 
    session[:cart_id] = nil 
    Notifier.order_received(@order).deliver     #THIS IS LINE 58
    format.html { redirect_to(store_url, :notice => I18n.t('.thanks')) }
    format.xml  { render :xml => @order, :status => :created, :location => @order }
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @order.errors, :status => :unprocessable_entity }
  end
end

我的第58和54号线出了什么问题?这与app / config / environment.rb中的action_mailer设置有关吗?

这是environment.rb

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

# Initialize the rails application
Depot::Application.initialize!

#uncertain about anything below this line

Depot::Application.configure do 
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    :address    => "smtp.gmail.com",
    :port       => 587,
    :domain     => "gmail.com",
    :authentication => "plain",
    :user_name  => "myemail@gmail.com",
    :password   => "<password>",
    :enable_starttls_auto => true
}
end

感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:5)

我在阅读本书时遇到同样的问题,但以下配置使其有效:

config.action_mailer.smtp_settings = {
  enable_starttls_auto: true,
  address: 'smtp.gmail.com',
  port: 587,
  authentication: 'plain',
  user_name: 'myemail@gmail.com',
  password: '<password>'
}

请注意,我没有smtp_settings哈希上包含域。

最后一件事,请务必在进行更改后重新启动rails应用程序。这将为您节省一些不必要的麻烦。

答案 1 :(得分:2)

声誉太低而无法评论,但在@ Edgar的回答中,还要确保如果您正在阅读用于smtp设置的YAML配置,则使用symbolize_keys!

email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/email.yml"))
config.action_mailer.smtp_settings = email_settings[Rails.env].symbolize_keys! unless email_settings[Rails.env].nil?

Rails没有检查字符串键,而且好,这是一个很长的3个小时......