我想在我们的学生服务器上部署我的django宠物项目。 我们有UserDir mod的apache2,我没有访问apache2configuration文件。 我如何部署? 😀
我来自PHP的背景,我部署我的PHP脚本上传到我的public_html
目录,一切都显示在http://ourserver.com/~myusername 。 我读了django文档,它说我应该添加<Location>some stuff</Location>
到我们的apacheconfiguration文件。 我没有访问它,所以我试图将其放入.htaccess在我的public_html
目录,并没有工作。 我GOOGLE了很多,我想我读了一个地方,你不能把<Location>
放在.htaccess,但现在我找不到那个报价。
那么,这里的任何人都没有骚扰Apachepipe理员部署django到UserDir?
编辑:我testing了mod_python格雷厄姆Dumpletonbuild议在这里 ,我可以使用mod_python没有问题。 此外,我发现错误日志,这里是什么错误日志说当我把<Location>some stuff</Location>
在.htaccess中:
"[Thu Oct 01 21:33:19 2009] [alert] [client 188.129.74.66] /path/to/my/.htaccess: <Location not allowed here"
所以,好像我真的不能把<Location>
放到.htaccess中。 那么,我有什么select?
如果安装了mod_python,首先看看你是否可以实际使用它,而不需要管理员做任何事情。 读:
http://www.dscpl.com.au/wiki/ModPython/Articles/GettingModPythonWorking
除非你是一个值得信赖的用户,否则管理员不知道他们在做什么,他们不应该让你使用mod_python,因为你的代码将以Apache用户身份运行,如果其他人也以同样的方式运行应用程序,你可能会干涉每个其他应用程序和数据。 换句话说,这是不安全的,不应该用在同一个Apache实例上有多个用户的共享主机环境中。
更新1
基于你现在有mod_python的工作,你应该能够用类似的东西替换mptest.py的内容:
import os os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings' import sys sys.path.insert(0, '/some/path/to/project/area/mysite') sys.path.insert(0, '/some/path/to/project/area') from django.core.handlers.modpython import handler as _handler def handler(req): req.get_options()['django.root'] = '/~myusername/mptest.py' return _handler(req)
很显然,应该根据你的命名来改变不同的路径和价值。
该网站将被访问为“/~myusername/mptest.py”。
在这一点上,你会发现愚蠢的使用mod_python是你没有控制Apache的地方。 这是因为,当您更改站点中的代码时,您需要请管理员为您重新启动Apache,以便更改您的更改。
使用守护进程模式下的mod_wsgi作为守护程序进程的拥有者将会好得多,但是如果他们已经在运行mod_python,我不会推荐他们在同一时间加载两个模块,因为在某些情况下,mod_python会使用mod_wsgi,如果他们没有正确安装Python,你可能会遇到很多问题,所以不值得麻烦。
简而言之,在没有Apache控制的共享主机环境中使用mod_python是愚蠢且不安全的。
同样,已经记录了如何从每个用户目录运行Django,因为我不认为它之前已经有任何记录。
在基地Apache上启用mod_python
或mod_wsgi
吗? 你至少需要这个。
你会被允许在80以外的端口上运行自己的长时间运行的服务器进程吗? 这可能允许您使用Django测试服务器或使用本地配置文件的Apache副本服务Django内容。
你有没有尝试使用<Directory>
而不是<Location>
? 如果这不是由当地政策阻止,你应该能够做到这样的事情:
<Directory /path/to/your/home/public_html> # mod_python stuff here </Directory>
如果你和你的管理员有良好的关系,我会选择mod_wsgi
或者fastcgi
。 但是,如果是这种情况,则应该简单地将管理员设置为mod_wsgi
配置,因为它支持基于更新的重新加载并作为备用用户运行。 他应该能够将其设置为只需在您的帐户下运行一个wsgi文件 – 就像这样,可能会allow from all
具体取决于如何配置安全性:
<Directory /home/you/public_html> WSGIApplicationGroup PROJECT WSGIDaemonProcess YOU threads=15 processes=2 python-path=/home/YOU/.virtualenvs/PROJECT-env/lib/python2.6/site-packages WSGIProcessGroup YOUR_GROUP WSGIScriptAlias / /home/YOU/PROJECT/deploy/PROJECT.wsgi </Directory>
顺便说一下,上面假定使用真棒,高度推荐的virtualenv和virtualenvwrapper在您的主目录中创建本地python沙箱。 这将大大简化作为非管理员或当你有多个项目的生命运行。 如果你不使用virtualenv,上面的python-path
可以完全删除。
如果配置了mod_fcgi,则可以使用它。 见http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/