我使用设计构建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
实际上,设计注册功能可以正常工作,但登录不起作用。 此问题仅在生产时发生。
答案 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%确定它的错误。