可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have been working with rails since a long. Now I am facing a small issue in the ActionMailer. I want to send an email when user gets registered to confirm his registration. I am able to send email in the development mode but where as not in the production mode.
the exception Errno::ECONNREFUSED: Connection refused - connect(2) is coming everytime when deliver method is called.
I have written the following code.
My SMTP config looks:
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 => 'xxxxxxx@xxx.xxx', :password => 'xxxxxxxxx' }
In the controller, I have written the following:
def confirm_registration_in_c @user = User.find_by_email(asdf123@gmail.com) if @user UserMailer.confirm_registration(@user).deliver end end
In my user_mailer.rb :
class UserMailer email, :subject => "Reset your password") end end
I am able to send email in the development mode in my local host, but I am not able to send the email in the dedicated server.
Can anybody help me please?
回答1:
In my situation, I encountered similar problems when I was trying to making through a sending-email Rails app tutorial, the Heroku logs kept telling my that
......
Errno::ECONNREFUSED (Connection refused - connect(2) for "localhost" port 25):
......
After I compared my code with author's code, I got to find out that I had not setup my ActionMailer configurations in the config/environments/production.rb file.
Then I came to realized that I just had my config/environments/development.rb configured for sending-email, but I had not done it for my config/environments/production.rb.
So you may check it when your app's behavior difers between development and production.
回答2:
Be sure you have configured your port correctly. I switched from gmail in development (port 587) to sending from my local server in production and was getting this error till I corrected the port to the one my server uses (port 25).
回答3:
for production you cant write
config.action_mailer.default_url_options = { :host => "localhost:3000" }
add production url for host, like,
config.action_mailer.default_url_options = { :host => "http://www.yourdomain.com" }
回答4:
I just tracked down a similar problem while trying to deploy wordpress with Capistrano.
cap aborted! Errno::ECONNREFUSED: Connection refused - connect(2) for "{my-ip-address}" port {my-ssh-port}
I would also get this similar error:
Tasks: TOP => git:create_release (See full trace by running task with --trace) The deploy has failed with an error: #<:econnrefused: connection="" refused="" connect="" for="" port="">
It turns out it was an issue with concurrent SSH sessions as my server runs Fail2Ban. To solve that I simply did the following:
Edit the jail that contains SSH configurations
$ sudo nano /etc/fail2ban/jail.local
look for [SSH] and set enabled = false
then find [ssh-ddos] and set enabled = false
Remember to restart Fail2Ban after your changes and open-ssh (if thats what your using)
$ sudo service fail2ban reload
$ sudo /etc/init.d/ssh reload
Its worth noting that the connection would be refused at different steps (tasks) in the deployment. For example after a reboot and a quick bundle exec cap production deploy:check everything appeared fine. Then I tried to deploy and received the same error, but during the execution of a different task. I also use UFW which I disabled and reenabled without issues. UFW was not the cause of the above problem.
I had a similar problem after I solved this. It was an issue with the current directory permissions. That's over here.
回答5:
My problem is not identical to this question, but I feel many would found this thread via google.
If you use external SMTP service like sendgrid and has set up ActionMailer accordingly, yet it still gives this error:
Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 25
You may be passing config hash with String key, which are ignored. Keys must be symbols!
This may happen if it is de-serialized, what I did is to ensure keys are symbols:
config.action_mailer.smtp_settings = get_smtp_setting.symbolize_keys