ОК - я здесь над головой. Я использую:
- ruby-1.9.3-p0
- rails-3.1.3
- mail-2.3.0
- devise-1.5.3
Попытка включить опцию Devise :confirmable
и запустить службы smtp в моем приложении. Как только я добавляю /config/initializers/setup_mail.rb
, добавляю необходимые столбцы Devise в мою БД и атрибут :confirmable
к моей User
модели, я получаю ошибку сегментации. Это происходит сразу после регистрации пользователя. Devise
пытается отправить электронное письмо с подтверждением, что приводит к аварийному завершению работы библиотеки ruby smtp:
... lib/ruby/1.9.1/net/smtp.rb:583: [BUG] Segmentation fault
Последняя запись в log/development.log
:
Rendered devise/mailer/confirmation_instructions.html.erb (1.2ms)
Мой /config/initializers/setup_mail.rb
файл:
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "mydomain.com",
:user_name => "support@mydomain.com",
:password => "???????",
:authentication => "plain",
:enable_starttls_auto => true
}
ActionMailer::Base.default_url_options[:host] = "localhost:3000"
Мой config/environments/development.rb
файл имеет следующее:
config.action_mailer.delivery_method = :smtp
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
Вот немецкий код из ruby / 1.9.1 / net / smtp.rb (строка 583 находится ближе к середине):
def ssl_socket(socket, context)
OpenSSL::SSL::SSLSocket.new socket, context
end
def tlsconnect(s)
verified = false
s = ssl_socket(s, @ssl_context)
logging "TLS connection started"
s.sync_close = true
s.connect # THIS IS LINE 583
if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE
s.post_connection_check(@address)
end
verified = true
s
ensure
s.close unless verified
end
Похоже, что ошибка сегментации возникает, когда smtp пытается подключиться через сокет-соединение SSL (s.connect
). В setup_mail.rb
я пытался установить :enable_starttls_auto
на true
и false
. Я не получаю ошибку сегментации, когда она установлена на false
, но электронная почта не отправляется, так что это бесполезно.
Я легко могу подключиться к службе SMTP в Gmail, выполнив эту команду с моего Mac:
$ telnet smtp.gmail.com 587
Не знаете, куда идти отсюда - есть предложения?