Я развернул приложение Rails 4 с помощью Capistrano в экземпляре Google Compute Engine под управлением Debian 7. Я использую Nginx в качестве веб-сервера и Passenger в качестве сервера приложений. Для отправки электронных писем я использую Sendgrid, и в моем файле staging.rb есть следующее:
config.action_mailer.default_url_options = { host: 'smtp.sendgrid.net', port: 2525 }
config.action_mailer.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:user_name => '<my_sendgrid_username>',
:password => '<my_sengrid_password>',
:domain => '<ip address of my instance>',
:address => 'smtp.sendgrid.net',
:port => '2525',
:authentication => 'plain',
:enable_starttls_auto => true
}
Я также открыл порт 2525 в брандмауэре моего экземпляра с помощью облачной консоли Google. Однако я получаю исключение Net::OpenTimeout, когда мое приложение rails пытается отправить электронное письмо. Ниже приведена часть трассировки исключения
Net::OpenTimeout (execution expired):
/home/jimcgh/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/net/smtp.rb:541:in `initialize'
/home/jimcgh/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/net/smtp.rb:541:in `open'
/home/jimcgh/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/net/smtp.rb:541:in `tcp_socket'
/home/jimcgh/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/net/smtp.rb:551:in `block in do_start'
/home/jimcgh/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/timeout.rb:89:in `block in timeout'
/home/jimcgh/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/timeout.rb:99:in `call'
/home/jimcgh/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/timeout.rb:99:in `timeout'
/home/jimcgh/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/net/smtp.rb:550:in `do_start'
/home/jimcgh/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/net/smtp.rb:520:in `start'
mail (2.6.3) lib/mail/network/delivery_methods/smtp.rb:112:in `deliver!'
mail (2.6.3) lib/mail/message.rb:2141:in `do_delivery'
mail (2.6.3) lib/mail/message.rb:236:in `block in deliver'
actionmailer (4.2.1) lib/action_mailer/base.rb:543:in `block in deliver_mail'
activesupport (4.2.1) lib/active_support/notifications.rb:164:in `block in instrument'
activesupport (4.2.1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.2.1) lib/active_support/notifications.rb:164:in `instrument'
actionmailer (4.2.1) lib/action_mailer/base.rb:541:in `deliver_mail'
mail (2.6.3) lib/mail/message.rb:236:in `deliver'
actionmailer (4.2.1) lib/action_mailer/message_delivery.rb:85:in `deliver_now'
devise (3.5.1) lib/devise/models/authenticatable.rb:170:in `send_devise_notification'
devise (3.5.1) lib/devise/models/confirmable.rb:114:in `send_confirmation_instructions'
devise (3.5.1) lib/devise/models/confirmable.rb:170:in `send_on_create_confirmation_instructions'
activesupport (4.2.1) lib/active_support/callbacks.rb:432:in `block in make_lambda'
activesupport (4.2.1) lib/active_support/callbacks.rb:228:in `call'
activesupport (4.2.1) lib/active_support/callbacks.rb:228:in `block in halting_and_conditional'
activesupport (4.2.1) lib/active_support/callbacks.rb:506:in `call'
activesupport (4.2.1) lib/active_support/callbacks.rb:506:in `block in call'
activesupport (4.2.1) lib/active_support/callbacks.rb:506:in `each'
activesupport (4.2.1) lib/active_support/callbacks.rb:506:in `call'
activesupport (4.2.1) lib/active_support/callbacks.rb:92:in `_run_callbacks'
activesupport (4.2.1) lib/active_support/callbacks.rb:776:in `_run_create_callbacks'
activerecord (4.2.1) lib/active_record/callbacks.rb:306:in `_create_record'
activerecord (4.2.1) lib/active_record/timestamp.rb:57:in `_create_record'
activerecord (4.2.1) lib/active_record/persistence.rb:502:in `create_or_update'
Я прочитал документацию на веб-сайте Google Compute Engine об отправке электронных писем и видите, что исходящий порт 25 заблокирован, поэтому я использую 2525. Я также пытался использовать: 2525 и: Plain вместо «2525» и «plain» в моих настройках ActionMailer в staging.rb. В чем здесь может быть проблема?
Пожалуйста, помогите Спасибо