Подтвердить что ты не робот

Errno:: ECONNREFUSED: соединение отклонено - подключитесь (2) к почтовой программе действия

Я долго работал с рельсами. Теперь я сталкиваюсь с небольшой проблемой в ActionMailer. Я хочу отправить электронное письмо, когда пользователь зарегистрируется, чтобы подтвердить его регистрацию. Я могу отправить электронную почту в режиме разработки, но где не в режиме производства.
исключение Errno:: ECONNREFUSED: соединение отклонено - соединение (2) приходит каждый раз, когда вызывается метод доставлять.

Я написал следующий код.

Моя конфигурация 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

Я могу отправить электронную почту в режиме разработки на моем локальном хосте, но я не могу отправить электронное сообщение на выделенный сервер.

Кто-нибудь может мне помочь?

4b9b3361

Ответ 1

В моей ситуации я столкнулся с подобными проблемами, когда пытался создать учебник по электронной почте для отправки по электронной почте, журналы Heroku говорили мне, что

......

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

......

После того, как я сравнил свой код с авторским кодом, мне нужно выяснить, что я не настраивал свои конфигурации ActionMailer в файле config/environment/production.rb.

Затем я понял, что у меня только что настроен для отправки электронной почты config/environment/development.rb, но я не сделал этого для моей конфигурации/окружения/производства. гь.

Таким образом, вы можете проверить это, когда поведение вашего приложения отличается между развитием и производством.

Ответ 2

Убедитесь, что вы правильно настроили порт. Я переключился с gmail в разработке (порт 587) на отправку с моего локального сервера на производстве и получал эту ошибку, пока не исправил порт до того, что использует мой сервер (порт 25).

Ответ 3

для производства вы не можете писать

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

добавить производственный URL для хоста, например,

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

Ответ 4

Я просто просмотрел подобную проблему, пытаясь развернуть wordpress с Capistrano.

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}>

Оказывается, это была проблема с одновременными сеансами SSH, так как мой сервер запускает Fail2Ban. Чтобы решить это, я просто сделал следующее:

  • Отредактируйте тюрьму, содержащую конфигурации SSH

    $ sudo nano /etc/fail2ban/jail.local

  • найдите [SSH] и установите enabled = false

  • затем найдите [ssh-ddos] и установите enabled = false

  • Не забудьте перезапустить Fail2Ban после ваших изменений и open-ssh (если это то, что вы используете)

$ sudo service fail2ban reload

$ sudo /etc/init.d/ssh reload

Стоит отметить, что соединение будет отклонено на разных этапах (задачах) в развертывании. Например, после перезагрузки и быстрого bundle exec cap production deploy:check все оказалось прекрасным. Затем я попытался развернуть и получить ту же ошибку, но во время выполнения другой задачи. Я также использую UFW, который я отключил и повторно включил без проблем. UFW не была причиной вышеупомянутой проблемы.

У меня была аналогичная проблема после того, как я решил это. Это проблема с разрешениями каталога current. Это здесь.