首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解读一种特殊的心理事件2:操作错误

解读一种特殊的心理事件2:操作错误
EN

Stack Overflow用户
提问于 2016-06-26 07:13:49
回答 1查看 210关注 0票数 1

我有一个Django web应用程序与postgresql后端,用户聚集在一起,并相互留言。这些消息可以是向上的,也可以是被否决的。如果有任何虐待,很多反对者会得到"鬼被禁“(在我的网站上被称为地狱禁令)。

为了实现这一点,我有一个简单的中间件来检查用户是否被禁止:

代码语言:javascript
复制
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
from myapp.models import HellBanList

class HellBannedMiddleware(object):

    def process_request(self, request):
        if request.user.is_authenticated():
            request.user_banned = HellBanList.objects.filter(condemned=request.user).exists()
        else:
            request.user_banned = 0

根据中间件返回的内容,我在网站上采取了某些操作。

我用新的文物来监控我的应用程序。断断续续地,我看到一个错误出现。我需要帮助破译这件事,以及我能采取什么措施来处理它。其内容如下:

代码语言:javascript
复制
psycopg2:OperationalError

/myproject.middleware.HellBanned:HellBannedMiddleware.process_request

Error message

psycopg2:OperationalError: could not translate host name "mywebapp.cloudapp.net" to address: Name or service not known 

完整的堆栈跟踪如下:

代码语言:javascript
复制
Stack trace
Traceback (most recent call last):
File "/home/myuser/.virtualenvs/myenv/bin/gunicorn", line 11, in <module>
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 74, in run
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 189, in run
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 72, in run
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 181, in run
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 477, in manage_workers
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 540, in spawn_workers
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 124, in init_process
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 119, in run
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 66, in run_for_one
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 30, in accept
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 130, in handle
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 176, in handle_request
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/newrelic-2.56.0.42/newrelic/api/web_transaction.py", line 704, in __iter__
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/newrelic-2.56.0.42/newrelic/api/web_transaction.py", line 1080, in __call__
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 255, in __call__
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 92, in get_response
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/newrelic-2.56.0.42/newrelic/hooks/framework_django.py", line 228, in wrapper
File "/home/myuser/myfolder/myproject/middleware/HellBanned.py", line 8, in process_request
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/utils/functional.py", line 202, in inner
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/utils/functional.py", line 268, in _setup
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/contrib/auth/middleware.py", line 18, in <lambda>
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/contrib/auth/middleware.py", line 10, in get_user
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py", line 134, in get_user
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py", line 46, in __getitem__
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py", line 168, in _get_session
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/user_sessions/backends/db.py", line 32, in load
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/db/models/manager.py", line 143, in get
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 382, in get
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 90, in __len__
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/db/models/query.py", line 301, in iterator
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 775, in results_iter
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 839, in execute_sql
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/db/backends/__init__.py", line 326, in cursor
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 182, in _cursor
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/newrelic-2.56.0.42/newrelic/hooks/database_dbapi2.py", line 102, in __call__
File "/home/myuser/.virtualenvs/myenv/local/lib/python2.7/site-packages/psycopg2/__init__.py", line 164, in connect

如果你仔细观察,我的禁止中间件的第8行出现了一个错误,它恰好是这样的:if request.user.is_authenticated():

正如我所说,这个错误是间歇性地出现的。上一次我看到一系列这样的错误是在一个导致我的网站崩溃的disk full错误之后的几个小时,尽管我也看到它弹出了。

有人能对这是什么以及我如何处理遇到这个问题的不幸用户的错误提供一些专家意见吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-27 07:13:04

背景

您的postgresql数据库似乎是托管在mywebapp.cloudapp.net上的,它的端口(5432)对公众开放。这不是最佳做法。通常,出于安全原因,您应该只在专用网络IP上公开数据库。其次,连接到远程位置上的数据库意味着要向每个查询添加从20-30毫秒到数百毫秒的任何内容。如果获取大量数据,延迟可能以秒为单位进行测量。

更糟糕的是,您使用的是服务器的FQDN,而不是它的IP地址。这意味着每个请求还涉及DNS解析。除非本地缓存DNS请求,否则可能会有20-30毫秒的开销。你还遇到了你刚刚做过的问题!

临时解决办法:

为了避免您的站点因DNS解析问题而失败,请查找服务器的IP地址,并在django settings.py中使用它,而不是主机名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38036075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档