2012-04-04 14 views
0

Ich habe eine Anwendung mit Rails 3 erstellt und ich habe eine einfache Kontaktseite erstellt, um E-Mails über meinen SMTP-Server zu senden. Das Problem ist, meine App kann Mail senden, wenn ich es in meinem lokalen Host (mein PC) ausführen, aber es funktioniert nicht, wenn ich die App auf dem Hosted Server (Hostgator) ausführen. Das lustige Zeug ist, dass der SMTP-Server der gleiche ist! ActionMailer funktioniert auf localhost aber nicht auf einem öffentlichen Server

Dies ist die config in meinem localhost (und es funktioniert!):

config/Umgebungen/developer.rb

# ActionMailer Config 
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.default :charset => "utf-8" 

config/initializers/setup_mail.rb

ActionMailer::Base.smtp_settings = { 
    :address    => "mail.mydomain.org", 
    :port     => 26, 
    :domain    => "app.mydomain.org", 
    :user_name   => "[email protected]", 
    :password    => "********", 
    :authentication  => "plain", 
    :enable_starttls_auto => false 
} 

Die URL für meinen Host-Server ist app.mydomain.org, also in der gehosteten App habe ich nur diese geändert :

config/Umgebungen/development.rb

# ActionMailer Config 
config.action_mailer.default_url_options = { :host => 'mydomain.org' } 
... 

In dem Host-Server für nur jetzt habe ich die App mit WEBrick im Entwicklungsmodus laufen. Und ich bekomme einen Timeout-Fehler:

.... 
Timeout::Error (execution expired): 
    app/controllers/contact_us_controller.rb:13:in `create' 
... 

Am I somenthing fehlt ??

EDIT & GELÖST:

Hostgator Support-Mitarbeiter haben gerade die Ursache für dieses Problem erfahren. In der ActionMailer Konfiguration muss :addresslocalhost und nicht mail.mydomain.org sein. So würde der ActionMailer sein:

+0

Vielleicht blockiert Hostgator den SMTP-Port? –

+0

Wenn es so wäre, würde es nicht funktionieren, wenn ich die App in meinem PC laufen lasse, oder? –

+0

Ich denke nur laut :) –

Antwort

0

Ich denke du meinst development.rb, nicht developer.rb. Diese Einstellung wird nur in der Entwicklung ausgeführt und wenn Sie RAILS_ENV als Produktion auf dem Server festgelegt haben, wird production.rb, nicht development.rb, verarbeitet.

Wenn der Server für beide gleich ist, können Sie dies in application.rb (oder ein Skript in config/initializers) verschieben. Möglicherweise möchten Sie jedoch ein anderes Setup für die Produktion, sodass es auf localhost verweist. Das kann auch das Problem beheben, falls ein DNS-Problem oder eine Serverkonfiguration die ausgehende SMTP-Anfrage verhindert.

+0

Ja, ich meine development.rb :) und in der Gehosteter Server Ich habe RAILS_ENV nicht eingestellt, weil ich nur ein Schaufenster der App starte. Der Server ist auf beiden Hosts gleich und wird es für einige Monate sein. –

Verwandte Themen