为什么我的远程MongoDB连接需要在每个查询上进行身份验证?

时间:2010-08-11 07:39:08

标签: python mongodb pymongo bottle

在与不同的事情争斗之后,我终于能够在Apache上运行BottlePY并运行MongoDB驱动的站点。我习惯于运行Django应用程序,因此我将在我的问题中与此相关。

问题

每次通过BottlePY加载页面时,需要重新验证与MongoHQ.com上的MongoDB数据库的连接(意味着它可能需要重新连接)。

我找到了什么

我在每个模型函数的顶部附加了一个db.keep_alive()函数,因此在运行任何mongodb查询之前,它会尝试运行一个简单的查询。如果失败,则捕获OperationFailure或AutoReconnect错误,然后调用db.authenticate()函数。在重新验证之后,我将它添加到日志数据库中以监视重新验证所需的频率。目前,它需要在每个页面加载时重新进行身份验证(这需要运行查询)。这不对。

与Django的区别

我在django中使用了相同的概念,并且发现只有在没有运行查询10-15分钟后才需要对db连接进行身份验证。

我不明白为什么在django中创建一个pymongo连接会不同于在瓶子中创建一个pymongo连接,因为我使用相同的驱动程序,函数和方法。我没有使用任何ORMS或类似的东西。

版本

  • 瓶子: 0.9.dev
  • Django: 1.2.1 final
  • PyMongo: 1.8

我很感激帮助!

更新:朋友能够快速查看并注意到以下内容可能有助于回答我的问题。

  

似乎每个请求都是   启动一个新的Python进程,如   反对Django,其中单一   过程仍然持续很长时间   一段时间。

2 个答案:

答案 0 :(得分:1)

这最终成为了Bottle和MongoHQ之间的一个奇怪的事情。没有找到真正的解决方案,但我无法用其他框架重新创建它。任何其他想法都表示赞赏。

答案 1 :(得分:0)

您的apache xxx.conf是否包含以下内容:

WSGIDaemonProcess project user=mysite group=www-data processes=5 threads=1 WSGIProcessGroup project

我认为最重要的应该是threads=1