2013-06-17 11 views
33

Pracuję z szynami od dłuższego czasu. Teraz mam do czynienia z małym problemem w ActionMailer. Chcę wysłać wiadomość e-mail, gdy użytkownik zostanie zarejestrowany, aby potwierdzić rejestrację. Jestem w stanie wysłać wiadomość e-mail w trybie programowania , ale gdzie jako nie w trybie produkcji .
wyjątkiem ERRNO :: ECONNREFUSED: Połączenie odrzucone - połączenia (2) zbliża się za każdym razem, gdy dostarczania metoda jest tzw.
Napisałem poniższy kod.
Moja SMTP config wygląda:
config.action_mailer.default_url_options = {: host => "localhost: 3000"}Errno :: ECONNREFUSED: Połączenie odrzucone - connect (2) do działania mailer

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

W regulatorze, napisałem co następuje:

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

W moim 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 

Jestem w stanie wysyłać wiadomości e-mail w trybie programowania na moim lokalnym hoście, ale nie mogę wysłać wiadomości e-mail na dedykowanym serwerze.
Czy ktoś może mi pomóc?

+0

Zobacz to: http://ramblinglabs.com/blog/2011/10/rails-3 -1-smtp-gmail-errnoeconnrefused-connection-odmowa – zeantsoi

Odpowiedz

4

do produkcji nie można napisać

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

stronę domową produkcję dla przyjmującego, jak,

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

Podałem moją oryginalną nazwę domeny, ale nadal nie działa. – VenkatK

+0

czy zrestartowałeś serwer po wprowadzeniu zmiany? – Inaccessible

+0

Tak Uruchomiłem serwer po wprowadzonych zmianach. Ale ten sam błąd. – VenkatK

8

Upewnij się, że prawidłowo skonfigurowany port. Zmieniłem z Gmaila w fazie rozwoju (port 587) na wysyłanie z mojego lokalnego serwera w produkcji i otrzymywałem ten błąd, dopóki nie skorygowałem portu do tego, którego używa mój serwer (port 25).

15

W mojej sytuacji, ja spotkałem się z podobnymi problemami, kiedy starałem się dokonywania przez wysyłanie wiadomości e-mail Rails app samouczek, dzienniki Heroku powtarzał mój że

......

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

......

Po porównaniu mojego kodu z kodem autora, musiałem się przekonać, że nie skonfigurowałem konfiguracji ActionMailer w konfiguracji plik fig/environments/production.rb.

Potem przyszedł sobie sprawę, że po prostu nie mój config/środowiska/development.rb skonfigurowany do wysyłania wiadomości e-mail, ale nie zrobił tego dla mojego config/środowiskach/production.rb.

Możesz sprawdzić, czy zachowanie aplikacji różni się między rozwojem a produkcją.

+0

Zrobiłem ten sam głupi błąd. Dodałem wiersz 'config.action_mailer.smtp_settings = {address:" xxxxxxx.xxxxxxx.com "}' in app/config/environments/development.rb, ale zapomniałem dodać go do app/config/environments/production.rb. – wetjosh

0

Właśnie wyśledziłem podobny problem podczas próby rozmieszczenia wordpress z Capistrano.

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

Chciałbym również uzyskać ten podobny błąd:

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

Okazuje się, że był problem z jednoczesnych sesji SSH jak mój serwer działa fail2ban. Aby rozwiązać to po prostu zrobił, co następuje:

  1. Edycja więzienia, który zawiera konfiguracje SSH

    $ sudo nano /etc/fail2ban/jail.local

  2. wygląd [SSH] i zestaw enabled = false

  3. następnie znaleźć [ssh-ddos] i ustaw włączony = false

  4. Pamiętaj, aby ponownie uruchomić Fail2Ban po zmiany i otwartym ssh (jeśli to jest to co używasz)

$ sudo service fail2ban reload

$ sudo /etc/init.d/ssh reload

Warto zauważyć, że połączenie zostanie odrzucone na różnych etapach (zadania) w zakresie oddelegowania. Na przykład po ponownym uruchomieniu i szybkim bundle exec cap production deploy:check wszystko wyglądało dobrze. Następnie próbowałem wdrożyć i otrzymał ten sam błąd, ale podczas wykonywania innego zadania. Używam również UFW, którą wyłączam i ponownie włączam bez problemów. UFW nie było przyczyną powyższego problemu.

Miałem podobny problem po rozwiązaniu tego problemu. To był problem z uprawnieniami katalogu current. To jest over here.

0

Mój problem nie jest identyczny z tym pytaniem, ale czuję, że wielu znalazłoby ten wątek za pośrednictwem google.

Jeśli używasz zewnętrznej usługi SMTP jak sendgrid i utworzyła ActionMailer odpowiednio, ale nadal daje ten błąd:

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

może być przechodzącą config skrótu z kluczem String, które są ignorowane. Klucze muszą być symbols!

może się to zdarzyć, jeśli to jest de-odcinkach, co zrobiłem jest zapewnienie klucze są symbole:

config.action_mailer.smtp_settings = get_smtp_setting.symbolize_keys 
Powiązane problemy