Heroku上的Rails ActiveRecord :: StatementInvalid(PGError:SSL错误:cert已经在哈希表中

时间:2012-10-14 06:36:12

标签: heroku ruby-on-rails-3.2

我使用设计构建Rails3.2个应用程序并在heroku上部署。 有没有人有任何解决方案来解决以下问题? 登录操作后,会出现以下错误并回复http status 500

2012-10-14T05:29:08+00:00 app[web.1]: : SELECT  "users".* FROM "users"  WHERE   
 (lower(username) = '***' OR lower(email) = '***') LIMIT 1):
2012-10-14T05:29:08+00:00 app[web.1]:   app/models/user.rb:23:in    
 find_for_database_authentication'
2012-10-14T05:29:08+00:00 app[web.1]:
2012-10-14T05:29:08+00:00 app[web.1]: ActiveRecord::StatementInvalid (PGError: SSL
 error: cert already in hash table
2012-10-14T05:29:08+00:00 app[web.1]:    
 app/controllers/users/sessions_controller.rb:9:in `create'
2012-10-14T05:29:08+00:00 app[web.1]:
2012-10-14T05:29:08+00:00 heroku[router]: POST agile-cliffs-   
 6123.herokuapp.com/users/sign_in dyno=web.1 queue=0 wait=0ms service=45ms status=500 
 bytes=643

实际上,设计注册功能可以正常工作,但登录不起作用。 此问题仅在生产时发生。

1 个答案:

答案 0 :(得分:1)

从以前编辑我的非答案:我们终于找到了问题的核心!

我们正在使用ruby-openid-apps-discovery gem,因为我们的应用程序与GApps Marketplace集成在一起。我们正在以原始形式使用gem,但如果您使用OmniAuth并启用了google_apps策略,那么您也在使用它。

归结为http://code.google.com/p/ruby-openid-apps-discovery/source/browse/trunk/lib/gapps_openid.rb

的第255行

加载其他CA证书(add_file)会污染OpenSSL并且当前的Postgres SSL连接已损坏

@@store = OpenSSL::X509::Store.new
@@store.set_default_paths
@@store.add_file(ca_bundle_path)        

您唯一的选择是重新连接到Postgres或猴子修补store()方法并删除对add_file的调用。 Heroku dyno已经拥有了CA证书,这足以显示GApps OpenID发现。

仅供参考,我尝试使用一个空白的Rails应用程序,只使用OmniAuth并启用了google_apps策略并且无法复制这个问题做了一个干净的房间复制。所以也许它是这个ruby-openid-apps-discovery gem的组合我们的应用程序中的另一个组件也在玩OpenSSL游戏来解决这个问题。我会针对这个宝石提出一个错误,但项目看起来大部分已经死了,因为我不能干净地重复问题,我不能说100%确定它的错误。