【问题标题】:File does not exist error in django,mod_wsgi and apache configurationdjango、mod_wsgi 和 apache 配置中的文件不存在错误
【发布时间】:2014-07-03 12:14:47
【问题描述】:

我有一个 Django 应用程序,我尝试在 Debain Linux 上使用 mod_wsgi 和 Apache 网络服务器托管它。

代码在我的本地机器和使用 Django 开发网络服务器的 Live 服务器上运行良好。我可以成功浏览到127.0.0.1:8000/index

当我尝试通过 Apache 运行时, 这是我收到的错误(Apache 错误日志)

[Fri Jul 04 10:46:17 2014] [error] [client ] File does not exist: /var/www/mydomain.com/htdocs/DataAnalysis/DataAnalysisSite/wsgi.py/index

我已阅读并尝试过以下文章中的所有组合 - webpython.codepoint.net/wsgi_tutorial - docs.djangoproject.com/en/dev/topics/install/ - library.linode.com/frameworks/django-apache-mod-wsgi/ubuntu-10.04-lucid -stackoverflow.com/questions/11380214/why-doesnt-apache-display-404-errors-with-django-and-mod-wsgi - blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html

这是我的目录结构

.
 DataAnalysis
 ├── Application
 │   ├── admin.py
 │   ├── admin.pyc
 │   ├── __init__.py
 │   ├── __init__.pyc
 │   ├── models.py
 │   ├── models.pyc
 │   ├── tests.py
 │   ├── views.py
 │   └── views.pyc
 ├── DataAnalysisSite
 │    ├── Alt.pkl
 │   ├── __init__.py
 │   ├── __init__.pyc
 │   ├── settings.py
 │   ├── settings.pyc
 │   ├── urls.py
 │   ├── urls.pyc
 │   ├── Wann.pkl
 │   ├── wsgi.py
 │   └── wsgi.pyc
 ├── manage.py
 ├── templates
 │   └── search_form.html
 └── wsgi.py

这是我的 apache 配置文件:

<Directory /var/www/mydomain.com/htdocs>
    Options ExecCGI Indexes
    Order deny,allow
    Allow from all
    AddHandler  /var/www/mydomain.com/htdocs/DataAnalysis/DataAnalysisSite/wsgi.py .py
</Directory>

<VirtualHost xx.xxx.xxx.xx:80>
    ServerName mydomain.com
    ServerAdmin webmaster@mydomain.com

    ErrorLog "/var/log/apache2/mydomain.com-error.log"
    CustomLog "/var/log/apache2/dmydomain.com-access.log" combined

    WSGIScriptAlias / /var/www/mydomain.com/htdocs/DataAnalysis/DataAnalysisSite/wsgi.py

</VirtualHost>

这是我的 Wsgi.py 文件:

import sys
import site
import os
import django.core.handlers.wsgi

# we add currently directory to path and change to it
pwd = os.path.dirname(os.path.abspath(__file__))
os.chdir(pwd)
sys.path = [pwd] + sys.path

sys.path.insert(0, '/var/www/mydomain.com/htdocs/DataAnalysis')
      sys.path.insert(1,'/var/www/mydomain.com/htdocs/DataAnalysis/DataAnalysisSite')

sys.path.append('/var/www/mydomain.com/htdocs/DataAnalysis')
  sys.path.append('/var/www/mydomain.com/htdocs/DataAnalysis/DataAnalysisSite')

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DataAnalysisSite.settings")

#from django.core.wsgi import get_wsgi_application
#application = get_wsgi_application()

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

这是我的 urls.py 文件:

from django.conf.urls import patterns, include, url
from Application import views
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
# Examples:
# url(r'^$', 'form_test.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),

url(r'^admin/', include(admin.site.urls)),
url(r'^index/$', views.index),
url(r'^search-form/$', views.search_form),
url(r'^search/$', views.search),
)

我正在使用 pycharm,views.py 与 unit.py、admin.py models.py 和 test.py 一起在应用程序文件夹中。

这是我的观点.py:

from django.shortcuts import render
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from sklearn.naive_bayes import GaussianNB
from sklearn import cross_validation
from sklearn.feature_extraction import DictVectorizer
from sklearn.externals import joblib
import os

import csv

@csrf_exempt
def index(request):
    return HttpResponse('welcome to python django')

为什么我的 wsgi 文件在 views.py 中找不到任何内容?

是否有任何配置错误? 任何帮助都非常感谢!

最好的

【问题讨论】:

  • 什么文件不存在? exact 错误是什么?为什么最后突然说在views.py中找不到函数——这和错误有什么关系?
  • 为什么你的目录配置中有那个奇怪的AddHandler 行?
  • AddHandler 有什么问题?
  • 问题是拥有一个根本没有任何意义。您不希望 Apache 为该文件调用处理程序,您希望它用作 WSGI 应用程序,这就是 WSGIScriptAlias 的用途。 (但这不是问题的根源。)
  • 我应该把views.py放在哪里?

标签: django apache mod-wsgi


【解决方案1】:

错误消息准确地告诉您发生了什么:没有与根 URL / 匹配的内容。这从你的 urls.py 中应该很明显:你有“admin”、“index”、“search-form”和“search”的模式,但没有“”。

但是,您应该在部署之前对此进行诊断。当你用开发服务器在本地机器上运行它时,你去localhost:8000/时发生了什么?您会看到完全相同的错误,然后您不会认为它与您的 Apache 配置有任何关系。

【讨论】:

  • 当使用命令 $ python manage.py runserver 运行 Django 开发服务器时,可以通过 url 127.0.0.1:8000/index 成功访问 django 项目我已经在我的本地机器和实时服务器上执行了此操作。问题是我无法让 Apache 运行。我需要 Apache,因为我想将我的域“mydomain.com”连接到这个 web 项目,而不是让它只在内部运行。
  • 好吧,我现在对您看到的实际错误完全感到困惑。您需要从您看到的错误屏幕或日志文件中发布 full 错误消息。
  • 这是 Apache 错误日志错误 '[Fri Jul 04 10:46:17 2014] [error] [client ] 文件不存在:/var/www/mydomain.com/htdocs/ DataAnalysis/DataAnalysisSite/wsgi.py/index`
  • 我添加了我的目录结构和我收到的 Apache 错误。我希望这能让我的问题的背景更清楚:-)
  • 您是否尝试过像我昨天告诉您的那样删除 AddHandler 行?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2016-03-15
  • 1970-01-01
相关资源
最近更新 更多