【发布时间】:2014-03-28 03:45:21
【问题描述】:
这是我第一次使用 Django(和 Python),所以在将我的网站部署到 Web 服务器时我有点困惑。我已经完成了本地开发,现在是时候将我的网站放到生产服务器上了。 我有带有 Webuzo CPanel 的专用服务器(Red Hat 4.4.4-13 OS),上面说我已经安装了 Python(v 2.7)、Django(1.6.1)和 Apache(2.4.4)。
当然,我有root访问权限,所以我已经登录到我的服务器并尝试检查是否安装了Django,但是这个命令
>>>import django
给了我这个错误:
importerror: No module named django.
(虽然 Webuzo 控制面板说我安装了 Django)。
在那之后,我设法使用 pip 安装了 Django。所以,现在,我已经安装了 Python 和 Django (1.6.2)。
我的下一步是在生产服务器上创建一个新的 Django 项目,以检查它是否可行,因此我在 public_html 文件夹中创建了新目录并在那里运行以下命令:
>>> django-admin.py startproject test
# python manage.py runserver
django 给了我这个信息:
Validating models...
0 errors found
February 26, 2014 - 00:15:48
Django version 1.6.2, using settings 'test.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
然后我尝试通过网络浏览器访问该位置,但没有发生任何事情(事实上,我只有网络文件夹结构)。 PS 我试图将 localhost 更改为我的服务器的 IP 地址和端口:80,但这给了我一个错误,即端口已在使用中。
我已经阅读了有关将网站部署到服务器的官方 Django 文档,但我不知道我是否应该搞乱 mod_wsgi、mod_fcgi、mod_python 之类的东西,因为正如我所说,我已经安装了 python 和 django在我的网络服务器上?
那么,我应该怎么做才能在我的网络服务器上运行 django?
更新
好的,我已经安装了 mod_wsgi 并将其添加到我的 Apache (2.4.4) 配置中:
WSGIScriptAlias / /home/****/public_html/*mysite.com*/testing/testing/wsgi.py
WSGIPythonPath /home/****/public_html/*mysite.com*
<Directory /home/****/public_html/*mysite.com*/testing>
<Files wsgi.py>
Order deny,allow
Require all granted
</Files>
</Directory>
这是我的文件夹结构:
/home/*****/public_html/mysite.rs:
----------------------------------testing:
-----------------------------------------manage.py
testing:
-------------------------------------------------__init__.py settings.py urls.py wsgi.py
当我访问 mysite.com 时,仍然没有任何反应(mysite.com/testing/ 禁止我)。难道我做错了什么? 我现在筋疲力尽,所以我明天试试 Heroku...
【问题讨论】:
-
如果您阅读过文档,就会知道您应该永远在生产环境中使用 runserver,是的,您需要使用 wsgi。
-
您需要对该主题进行更多阅读。如果您在专用机器上,mod_wsgi 应该是您最容易设置的(在使用共享主机时并不总是可以使用 mod_wsgi)
-
另外,要在使用 runserve 服务时访问页面(只是作为概念证明,从不在产品中),您应该将地址指定为 0.0.0.0 以接受任何连接:
python manage.py runserver 0.0.0.0:8000。由于另一个网络服务器正在使用它,您可能会遇到使用 80 的问题。如果可用,您需要成为 root (sudo) 才能分配它。 -
谢谢你们,你们为我指明了正确的方向。我一直对所有这些模块感到困惑,所以主要问题是我是否需要安装它们。我现在已经安装了 mod_wsgi。