web-dev-qa-db-ja.com

Errno :: ECONNREFUSED:接続が拒否されました-アクションメーラーのconnect(2)

私はRails長い間取り組んできました。今、ActionMailerで小さな問題に直面しています。ユーザーが登録されたときに、登録を確認するためにメールを送信します。 開発モードのメール、ただし not 本番モードの場合/
例外 Errno :: ECONNREFUSED:接続は拒否されました-connect(2)は、 deliver メソッドが呼び出されるたびに来ます。
次のコードを書きました。
SMTP構成は次のようになります。
config.action_mailer.default_url_options = {:Host => "localhost:3000"}

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

  config.action_mailer.smtp_settings = {   
    :openssl_verify_mode => OpenSSL::SSL::VERIFY_NONE,      
    :ssl => true,
    :enable_starttls_auto => true,  #this is the important stuff!
    :address        => 'smtp.xxxx.xxx',
    :port           => xxx,
    :domain         => 'xxxxxx',
    :authentication => :plain,
    :user_name      => '[email protected]',
    :password       => 'xxxxxxxxx'
  }

コントローラーでは、次のように書きました。

def confirm_registration_in_c       
 @user = User.find_by_email([email protected])
 if @user
      UserMailer.confirm_registration(@user).deliver            
 end
end

私のuser_mailer.rbで:

class UserMailer < ActionMailer::Base
  default from: "[email protected]"

  def confirm_registration(user)
   @user = user
   @user_name = @user.name       
   email = @user.email 
   mail(:to => email, :subject => "Reset your password")
  end
end

ローカルホストで開発モードでメールを送信できますが、専用サーバーでメールを送信できません。
誰か助けてください。

41
VenkatK

私の状況では、送信メールRailsアプリチュートリアル、Herokuログが

_......_

Errno::ECONNREFUSED (Connection refused - connect(2) for "localhost" port 25):

_......_

私のコードを著者のコードと比較した後、config/environments/production.rbファイルでActionMailer設定をセットアップしていないことがわかりました。

それから、私はちょうどconfig/environments/development.rbを送信メール用に設定しただけであることに気付きましたが、config/environments/production.rb

そのため、アプリの動作が開発と本番で異なる場合に確認できます。

21
oppih

ポートが正しく構成されていることを確認してください。開発中のgmail(ポート587)から本番環境のローカルサーバーからの送信に切り替え、ポートをサーバーが使用するポート(ポート25)に修正するまでこのエラーが発生していました。

8
Sorry-Im-a-N00b

本番では書くことはできません

config.action_mailer.default_url_options = { :Host => "localhost:3000" }

ホストの実稼働URLを追加します。たとえば、

config.action_mailer.default_url_options = { :Host => "http://www.yourdomain.com" }
5

私の問題はこの質問と同一ではありませんが、多くの人がこのスレッドをグーグル経由で見つけたと感じています。

Sendgridなどの外部SMTPサービスを使用し、それに応じてActionMailerをセットアップした場合でも、まだこのエラーが発生します。

Errno :: ECONNREFUSED:接続が拒否されました-「localhost」ポート25のconnect(2)

無視される文字列キーを持つ構成ハッシュを渡すことがあります。キーは symbols !でなければなりません

これは、シリアル化されていない場合に発生する可能性があります。キーをシンボルにすることを確認しました。

config.action_mailer.smtp_settings = get_smtp_setting.symbolize_keys
3
lulalala

このエラーには別の理由があります。

Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 25

サーバー上のSENDMAILサービスを確認する必要があります。

  • SENDMAILはインストールされていますか?
  • SENDMAILは実行されていますか?

SENDMAILが停止したため、このエラーが発生しました。

幸運を!

2
Taika

Capistranoでwordpressをデプロイしようとしたときに、同様の問題を突き止めました。

cap aborted! Errno::ECONNREFUSED: Connection refused - connect(2) for "{my-ip-address}" port {my-ssh-port}

私もこのようなエラーが発生します:

Tasks: TOP => git:create_release (See full trace by running task with --trace) The deploy has failed with an error: #<Errno::ECONNREFUSED: Connection refused - connect(2) for "my-ip-address" port {my-port}>

サーバーがFail2Banを実行しているため、同時SSHセッションの問題であることがわかりました。それを解決するために、私は単に次のことをしました。

  1. SSH構成を含むjailを編集します

    $ Sudo nano /etc/fail2ban/jail.local

  2. [SSH]を探して、enabled = falseを設定します

  3. [ssh-ddos]を見つけて、enabled = falseに設定します

  4. 変更とopen-sshの後、Fail2Banを再起動することを忘れないでください(それが使用している場合)

$ Sudo service fail2ban reload

$ Sudo /etc/init.d/ssh reload

デプロイメントのさまざまなステップ(タスク)で接続が拒否されることに注意してください。たとえば、再起動とクイックbundle exec cap production deploy:checkすべてがうまく見えた。その後、デプロイしようとしましたが、同じエラーを受け取りましたが、別のタスクの実行中です。また、問題なく無効にしてから再度有効にしたUFWを使用します。 UFWは上記の問題の原因ではありませんでした。

これを解決した後、同様の問題が発生しました。これは、currentディレクトリのアクセス許可の問題でした。それは ここにあります

0
Ken Prince