当前位置:  开发笔记 > 编程语言 > 正文

Amazon + Django每12小时出现[Errno 5]输入/输出错误

如何解决《Amazon+Django每12小时出现[Errno5]输入/输出错误》经验,为你挑选了1个好方法。

我最近设置并部署了一个Amazon EC2实例来部署我的django项目.

当我在浏览器中收到此错误时,我正通过浏览器与我的应用程序进行交互:

errno 5 input/output error django

在此输入图像描述

此错误确实引用了我的应用程序的某些功能

Environment:

Request Method: GET
Request URL: http://localhost:8000/accounts/profile/

Django Version: 1.9
Python Version: 3.4.3
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'crispy_forms',
 'django_extensions',
 'storages',
 'userprofile']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/home/ubuntu/.virtualenvs/nrb_dev/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
  149.                     response = self.process_exception_by_middleware(e, request)

File "/home/ubuntu/.virtualenvs/nrb_dev/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
  147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/ubuntu/.virtualenvs/nrb_dev/lib/python3.4/site-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "/home/ubuntu/.virtualenvs/nrb_dev/lib/python3.4/site-packages/django/utils/decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "/home/ubuntu/.virtualenvs/nrb_dev/lib/python3.4/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/home/ubuntu/.virtualenvs/nrb_dev/lib/python3.4/site-packages/django/utils/decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "/home/ubuntu/workspace/neurorehabilitation-system/userprofile/mixins.py" in dispatch
  7.         return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)

File "/home/ubuntu/.virtualenvs/nrb_dev/lib/python3.4/site-packages/django/views/generic/base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "/home/ubuntu/.virtualenvs/nrb_dev/lib/python3.4/site-packages/django/views/generic/base.py" in get
  157.         context = self.get_context_data(**kwargs)

File "/home/ubuntu/workspace/neurorehabilitation-system/userprofile/views.py" in get_context_data
  50.             print (user.is_physiotherapist)

Exception Type: OSError at /accounts/profile/
Exception Value: [Errno 5] Input/output error

在第50行的末尾引用了一个get_context_data()函数,该函数位于继承TemplateViewCBV的基于类的视图内

但在我的控制台中服务器需要重启,当我这样做时,错误解决了一个神奇的方式..

我搜索了这个错误,我发现这张票报了https://code.djangoproject.com/ticket/23284

这个报告与我的错误很相似......

另外我昨天有这个错误,我重新启动我的服务器,今天我再次出现错误.

使用Django的EC2基础架构存在一些问题(我不这么认为)或问题更多的是我的应用程序方面?

我不认为get_context_data()我的应用程序的功能是问题...



1> bgarcial..:

我一直在探索,我应该说这个错误的起源在我的代码中

我有两个新手错误:

    print 生产中的句子

在我在上面的问题中展示的追溯中,我print在这个get_context_data()函数中有一个句子:

File "/home/ubuntu/workspace/neurorehabilitation-system/userprofile/views.py" in get_context_data
  50.             print (user.is_physiotherapist)

有可能每次执行此打印句子时,进程尝试写入我的amazon ec2机器实例中的stdout文件.

我在该行中删除了这个打印句子,并通过git并重新启动gunicorn服务器将更改检索到我的生产服务器中,所有这些都很完美.

    我有 DEBUG=True 生产

我有以下设置文件:

settings/
    base.py # --- without DEBUG
    development.py # --- DEBUG=True
    testing.py # --- DEBUG=True
    production.py # --- DEBUG=False
    staging.py # --- DEBUG=False  

所有文件(development.py, testing.py, production.py, staging.py)都继承自base.py

但我不知道怎么做,在我的EC2实例中,production.py被执行,这继承所有来自base.py并覆盖DEBUG为False.

我一直在探索,一种可能性是根据运行我的应用程序的主机的名称更改它们的值(True或False),如本文所示

在我的情况下,这是我的主机名的值

(nrb_dev)ubuntu@ip-172-31-27-249:~$ python
Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> a=socket.gethostname()
>>> a
'ip-172-31-27-249'
>>> 
>>> if a != 'ip-172-31-27-249':
...     DEBUG = print ('Caleno juiciocito')
... 
>>> DEBUG
True
>>> 

这意味着,将我的base.py放入以下内容:

import socket

if socket.gethostname() == 'ip-172-31-27-249':
    DEBUG = False
else:
    DEBUG = True

虽然我在代码中硬编码生产服务器的主机名.这意味着当我们想要在其他具有其他主机名的机器中部署我的项目时,我将手动修改后添加一个点

这是最好的做法,尽管它是有效的吗?

我认为它是最适合的替代选择的另一种选择是修复DJANGO_SETTINGS_MODULE环境变量的值

在我的特殊情况下,我正在使用virtualenvwrapper,我有两个虚拟环境,所以:

nrb_dev 为我的开发环境

nrb_test对于我的测试环境.我有一些在激活虚拟环境时激活的钩子

nrb_dev$VIRTUAL_ENV/bin/postactivate我有这样的:

export DJANGO_SETTINGS_MODULE="neurorehabilitation.settings.development"

以同样的方式,nrb_test$VIRTUAL_ENV/bin/postactivate我有这个:

export DJANGO_SETTINGS_MODULE="neurorehabilitation.settings.testing"

这意味着在我的亚马逊EC2生产机器中我应该更改钩子$VIRTUAL_ENV/bin/postactivate以选择settings/production.py这种方式:

export DJANGO_SETTINGS_MODULE="neurorehabilitation.settings.production"

只是为了测试效果和时间方式,我打印我的DEBUGsettings/production.py

from .base import *

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
print (DEBUG) # just for now.

当我启动我的gunicorn守护程序服务器时,我可以看到DEBUG值设置为 False

(nrb_dev)ubuntu@ip-172-31-27-249:~/workspace/neurorehabilitation-system$ gunicorn -c neurorehabilitation/gunicorn_config.py neurorehabilitation.wsgi 
[2016-01-08 00:26:15 +0000] [6691] [INFO] Starting gunicorn 19.4.5
[2016-01-08 00:26:15 +0000] [6691] [INFO] Listening at: http://127.0.0.1:8000 (6691)
[2016-01-08 00:26:15 +0000] [6691] [INFO] Using worker: sync
[2016-01-08 00:26:15 +0000] [6694] [INFO] Booting worker with pid: 6694
False
^C[2016-01-08 00:26:19 +0000] [6691] [INFO] Handling signal: int

补充说明

我可以探索Django Logging功能,用于注册事件和我的应用程序的其他东西.

我应该探索管理服务,以便管理更好的生产方式.

主管的其他资源:

如何在Ubuntu中安装和管理主管

使用Nginx,Gunicorn,virtualenv,supervisor和PostgreSQL设置Django

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有