1

我用设计构建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

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

4

1 回答 1

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 发现。

仅供参考,我尝试使用仅启用 OmniAuth 和 google_apps 策略的空白 Rails 应用程序对这个问题进行无尘室重现,但无法重现 .. 所以也许它是这个 ruby​​-openid-apps-discovery gem 和另一个的组合我们的应用程序中的组件也在玩 OpenSSL 游戏以导致问题.. 我会针对这个 gem 提交一个错误,但该项目看起来大部分已经死了,因为我不能干净地重现问题,我不能说 100%肯定是它的错。

于 2012-11-29T13:14:02.453 回答