Ruby on rails 3 使用带有Desive&;的考拉获取SSL错误;Rails 3应用程序中的OmniAuth

Ruby on rails 3 使用带有Desive&;的考拉获取SSL错误;Rails 3应用程序中的OmniAuth,ruby-on-rails-3,facebook,devise,omniauth,koala,Ruby On Rails 3,Facebook,Devise,Omniauth,Koala,我正在使用Desive/OmniAuth和Koala构建Rails 3应用程序,我发现以下SSL错误: OpenSSL::SSL::SSLError in Users/omniauth callbacksController#facebook SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 导致此错误的代码是: @graph = Koala::Face

我正在使用Desive/OmniAuth和Koala构建Rails 3应用程序,我发现以下SSL错误:

OpenSSL::SSL::SSLError in Users/omniauth callbacksController#facebook
SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
导致此错误的代码是:

@graph = Koala::Facebook::GraphAPI.new(@token)
@friends = @graph.get_connections("me", "friends")
我正在使用Desive和OmniAuth来执行身份验证,这很有效。然后,我获取返回的facebook令牌,并尝试将其与考拉一起使用,如上图所示。这就是导致这个错误的原因

可能值得一提的是,我最初在Desive&OmniAuth中遇到了相同的错误。关于这个错误有几个主题,我通过设置我的config/initialisers/designe.rb来解决它

config.omniauth :facebook, APPID, APPKEY, {:client_options => {:ssl => {:ca_file =>  "/opt/local/share/curl/curl-ca-bundle.crt"}}} 
我猜我需要为考拉提供类似的配置,以便它知道在哪里检索本地ca_文件。不过,我在文档中找不到任何关于如何这样做的指示。关于如何做到这一点,或者如何避免一般的错误,有什么想法吗

我的开发环境是OSX。

您可以在环境文件(或使用gem的类)中设置以下选项:

Koala.http_service.ca_file = '/path/to/some/ca-certificate.crt'
来自考拉回购协议

您可以在考拉初始化器中设置此选项,该初始化器将全局设置此选项

/config/initializers/koala.rb


我发现这个解决方案很有用:把它放在您的环境配置文件中

(考拉::HTTPService.http_选项[:ssl]| |={})[:ca_路径]= “/path/to/ca/folder”(考拉::HTTPService.http_选项[:ssl]||= {}[:ca_file]='/path/to/ca/file'

您可以通过键入来获取路径

openssl版本-a

以及从结果中提取路径

资料来源:

我顺便买了MiniFB()作为考拉的替代品,到目前为止,我的运气更好。它至少返回数据而不给出SSL错误。
Koala.http_service.http_options = {
  :ssl => { :ca_path => "/etc/ssl/certs" }
}