私は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
ローカルホストで開発モードでメールを送信できますが、専用サーバーでメールを送信できません。
誰か助けてください。
私の状況では、送信メール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。
そのため、アプリの動作が開発と本番で異なる場合に確認できます。
ポートが正しく構成されていることを確認してください。開発中のgmail(ポート587)から本番環境のローカルサーバーからの送信に切り替え、ポートをサーバーが使用するポート(ポート25)に修正するまでこのエラーが発生していました。
本番では書くことはできません
config.action_mailer.default_url_options = { :Host => "localhost:3000" }
ホストの実稼働URLを追加します。たとえば、
config.action_mailer.default_url_options = { :Host => "http://www.yourdomain.com" }
私の問題はこの質問と同一ではありませんが、多くの人がこのスレッドをグーグル経由で見つけたと感じています。
Sendgridなどの外部SMTPサービスを使用し、それに応じてActionMailerをセットアップした場合でも、まだこのエラーが発生します。
Errno :: ECONNREFUSED:接続が拒否されました-「localhost」ポート25のconnect(2)
無視される文字列キーを持つ構成ハッシュを渡すことがあります。キーは symbols !でなければなりません
これは、シリアル化されていない場合に発生する可能性があります。キーをシンボルにすることを確認しました。
config.action_mailer.smtp_settings = get_smtp_setting.symbolize_keys
このエラーには別の理由があります。
Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 25
サーバー上のSENDMAILサービスを確認する必要があります。
SENDMAILが停止したため、このエラーが発生しました。
幸運を!
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セッションの問題であることがわかりました。それを解決するために、私は単に次のことをしました。
SSH構成を含むjailを編集します
$ Sudo nano /etc/fail2ban/jail.local
[SSH]を探して、enabled = falseを設定します
[ssh-ddos]を見つけて、enabled = falseに設定します
変更とopen-sshの後、Fail2Banを再起動することを忘れないでください(それが使用している場合)
$ Sudo service fail2ban reload
$ Sudo /etc/init.d/ssh reload
デプロイメントのさまざまなステップ(タスク)で接続が拒否されることに注意してください。たとえば、再起動とクイックbundle exec cap production deploy:check
すべてがうまく見えた。その後、デプロイしようとしましたが、同じエラーを受け取りましたが、別のタスクの実行中です。また、問題なく無効にしてから再度有効にしたUFWを使用します。 UFWは上記の問題の原因ではありませんでした。
これを解決した後、同様の問題が発生しました。これは、current
ディレクトリのアクセス許可の問題でした。それは ここにあります