我build立了一个数字海洋一键式应用程序(django + nginx + gunicorn安装并设置https://www.digitalocean.com/community/tutorials/how-to-use-the-django-one-click-安装图像 )。 默认值为我工作,但在我尝试通过service gunicorn restart
应用代码更改后,我收到了以下nginx错误日志行502错误:
connect() to unix:/home/django/gunicorn.socket failed (111: Connection refused) while connecting to upstream, client: 178.136.215.70, server: _, request: "GET / HTTP/1.1",upstream: "http://unix:/home/django/gunicorn.socket:/"..
我已经研究过类似的问题,发现它通常是由ALLOWED_HOSTS中的错误引起的,一切都在那里,但是我也尝试用单个'*'
代替'ip'
或'www.address.com'
,并得到了一个不同的错误:
recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 178.136.215.70, server: _, request: "GET / HTTP/1.1", upstream: "http://unix:/home/django/gunicorn.socket:/", host: "192.241.176.184"
编辑:好的,现在它更容易,gunicorn错误日志告诉我们,有一个与rest_framework导入错误,但它的安装,它存在于已安装的应用程序(和拼写正确),我检查了千次,所以真的是什么错所有这一切?
File "/usr/lib/python2.7/dist-packages/django/core/wsgi.py", line 14, in get_wsgi_application django.setup() File "/usr/lib/python2.7/dist-packages/django/__init__.py", line 18, in setup apps.populate(settings.INSTALLED_APPS) File "/usr/lib/python2.7/dist-packages/django/apps/registry.py", line 108, in populate app_config.import_models(all_models) File "/usr/lib/python2.7/dist-packages/django/apps/config.py", line 198, in import_models self.models_module = import_module(models_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) File "/usr/lib/python2.7/dist-packages/gevent/builtins.py", line 93, in __import__ result = _import(*args, **kwargs) File "/home/django/django_project/blog/models.py", line 5, in <module> from rest_framework import serializers File "/usr/lib/python2.7/dist-packages/gevent/builtins.py", line 93, in __import__ result = _import(*args, **kwargs) ImportError: No module named rest_framework
(现在唯一的问题)编辑2:我已经重新安装应用程序文件夹,再次检查一切。 现在它告诉ImportError: No module named django_ajax
。 Python 2.7,Django 1.8,Gunicorn 19.4.5( https://github.com/yceruto/django-ajax )尽pipe一切似乎是正确的
编辑:pip冻结的回应:
Django==1.8 django-filter==1.0.1 -e git://github.com/yceruto/django-ajax@9c122e68f8e7ca92333a1533fa464ee6da0f65c5#egg=djangoajax djangorestframework==3.5.3 gunicorn==19.6.0 Markdown==2.6.7 netifaces==0.10.5 pkg-resources==0.0.0 psycopg2==2.6.2
当你做Sudo的时候,这个软件包是为root用户安装的,并且它是全局安装的。 检查这个链接了解sudo pip是如何工作的。 现在你的软件包已经全局安装了,它正在工作。
我仍然怀疑它使用的是哪个Python。 在错误消息中,它试图访问全局dist-packages目录下的包。 不是来自虚拟环境。 所以,你的gunicorn发送连接到全球安装的Python而不是虚拟环境。
理想情况下,发生的错误应指向/path/to/virtual_env/virtual_env/lib/python2.7/dist-packages下的dist-packages,因为这是要使用的Python和库环境。 这似乎是问题。
如果是这种情况,你可以做下面的事情
DJANGODIR = / path / to / django-project / DJANGO_SETTINGS_MODULE = django-project.settings
cd $ DJANGODIR source / path / to / virtualenv / bin / activate export DJANGO_SETTINGS_MODULE = $ DJANGO_SETTINGS_MODULE export PYTHONPATH = $ DJANGODIR:$ PYTHONPATH
我认为这应该可以解决所有问题,请尝试一下,让我知道我是否错过了一些东西
我不确定,是否应该考虑答案,因为我不明白为什么这样做。 如果有人解释得当,我会把自己的答案标记为正确答案。 所以,这条线为我工作
sudo -H pip install djangorestframework
尽管包装被报告安装,他们不是。尽管他们是可见的后点滴pip freeze
。 所以我不知道为什么只是pip install
没有工作,但似乎工作,而不是(?),虽然所有的权限是正确的,我尝试从根和其他用户名相同的权限。