【问题标题】:Rails 3 - Devise/ActionMailer/RUBY-SMTP causing a segmentation faultRails 3 - 设计/ActionMailer/RUBY-SMTP 导致分段错误
【发布时间】:2012-02-20 06:04:17
【问题描述】:

好的 - 我在这里有点过头了。我正在使用:

  - 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 设置为truefalse。当设置为false 但没有电子邮件发送时,我没有收到分段错误,所以这是没用的。

通过在我的 Mac 上运行以下命令,我可以轻松连接到 gmail 的 smtp 服务:

$ telnet smtp.gmail.com 587

不确定从这里去哪里 - 有什么建议吗?

【问题讨论】:

  • 操作系统?如果窗口... :X
  • 我也有同样的问题 :(
  • 在另一个论坛上我得到了这个建议:paul_at_nines.org> Jan 29 12:40PM -0500 ...你有这个问题吗? christopherirish.com/2011/09/02/… 这看起来很有希望。我试过了,但后来 RVM 开始搞砸我的 Rails 安装。太 FUBAR 以至于我不得不完全停止使用 RVM 并切换到 Homebrew 来安装 ruby​​,这样我才能让 Rails 再次运行。真是难以置信!如果 seg 错误问题随着 Homebrew ruby​​ 消失,我将在此处发布更新。
  • 另外,我在 RMV 文档中找到了一个处理 OpenSSL 的页面 - 有人可能会发现它很有价值:beginrescueend.com/packages/openssl
  • 我能够测试 Homebrew 安装的 ruby​​,但仍然出现分段错误。 :-( 所以我想我回来看看我是否可以让 RVM 与 Rails 一起玩得很好......

标签: ruby ruby-on-rails-3.1 smtp actionmailer


【解决方案1】:

问题在于 Rails 与 OpenSSL 交互的方式。这个帖子总结的很好。 http://www.22ideastreet.com/debug/smtp-rb14-bug-segmentation-fault/

解决方法是将其添加到您的 .bashrc/.zshrc/.bash_profile

export RUBYOPT="-ropenssl" 

【讨论】:

    【解决方案2】:

    我有一个非常相似的错误(在 net/http 中)。

    这样做修复了它:

    rvm pkg install openssl
    rvm pkg install iconv
    rvm pkg install readline
    rvm reinstall 1.9.3  --with-iconv-dir=$rvm_path/usr  --with-openssl-dir=$rvm_path/usr  --with-readline-dir=$rvm_path/usr
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多