2009-09-29 81 views
0

我想在我们的学生服务器上部署我的django宠物项目。我们有UserDir mod apache2,我没有访问apache2配置文件。我如何部署? :-D部署django到UserDir

我来自PHP背景,我部署我的PHP脚本,将它们上传到我的public_html目录,所有内容都显示在http://ourserver.com/~myusername上。我阅读django文档,它说我应该将<Location>some stuff</Location>添加到我们的apache配置文件。我无法访问它,所以我尝试将它放在我的public_html目录中的.htaccess中,但这不起作用。我GOOGLE了很多,我想我读了一个地方,你不能把<Location>放在.htaccess中,但现在我找不到那个报价。

那么,这里有人在没有骚扰Apache管理员的情况下将django部署到UserDir?

编辑: 我测试了mod_python格雷厄姆邓普尔顿建议here,我可以利用mod_python的没有问题。另外,我发现错误日志和这里是什么错误日志中说,当我在.htaccess把<Location>some stuff</Location>

"[Thu Oct 01 21:33:19 2009] [alert] [client 188.129.74.66] /path/to/my/.htaccess: <Location not allowed here"

所以,好像我真的不能把<Location>到的.htaccess。那么,我有什么选择?

+0

mod_python已启用,mod_wsgi不是。我想我可以让我的管理员启用mod_wsgi,如果它不是太麻烦。 – dijxtra 2009-09-29 12:12:38

回答

0

mod_python还是mod_wsgi在基地Apache上启用?你至少需要这个。

+1

他说他无法访问Apache配置文件,所以mod_wsgi或mod_python都没有任何用处。即使管理员安装了mod_python,它也没用,因为它不提供用户分离。你可以得到mod_wsgi守护进程模式的用户分离,但意味着管理员在每个用户的基础上进行手动配置,他们不太可能想要这样做。其他选项是查看Apache实例是否安装了其中一个FASTCGI模块。 – 2009-09-29 10:51:21

+0

mod_python启用,mod_wsgi不是。 – dijxtra 2009-09-29 12:13:17

+0

mod_fastcgi也未启用。 – dijxtra 2009-09-29 14:38:10

0

你会被允许在80以外的端口上运行自己的长时间运行的服务器进程吗?这可能允许您使用Django测试服务器或使用本地配置文件的Apache副本服务Django内容。

+0

这可能是可能的。 Django测试服务器不适合生产,但如果没有其他解决方案,我自己使用替代端口号的Apache副本可能是一个解决方案。现在,这是我可以接近我的管理员。谢谢。 – dijxtra 2009-09-30 05:05:03

1

如果安装了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,因为我认为它以前没有任何记录。

+0

对不起,我很忙,明天下午(格林威治标准时间)我会测试我的mod_python。这篇文章看起来很棒,我发现我们的服务器上有mod_python 3.3.1,但是因为我现在就去了,所以我没有进一步的了解。我明天会回到这里,我真的很想解决这个问题... – dijxtra 2009-09-30 20:50:13

+0

该死的。我无法从那篇文章中运行mptext.py,我得到了403条禁止。我发了一封电子邮件给我的管理员,并要求他允许我使用mod_python。当他回应时,我会回复你,并且我得到一个工作的mod_python环境。 – dijxtra 2009-10-01 16:51:06

+0

最后。我无法通过你提供的链接完成测试,因为我的.htaccess是700.我修正了这个问题,现在我可以看到“mptest.py”。因此,我可以毫无问题地使用mod_python。顺便说一句,我的管理员告诉我错误日志是如此,我添加了额外的信息,我原来的问题。我可能应该先检查一下。 – dijxtra 2009-10-01 19:42:42

0

您是否尝试过使用<Directory>而不是<Location>?如果不阻止本地策略,你应该能够做这样的事情:

<Directory /path/to/your/home/public_html> 
# mod_python stuff here 
</Directory> 

我会用任何mod_wsgifastcgi如果你与你的管理良好的条件去。但是,如果是这种情况,您应该简单地能够给您​​的管理员配置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> 

顺便说一句,上述假定使用的真棒,强烈推荐virtualenvvirtualenvwrapper在您的主目录中创建本地python沙箱。这将以非管理员身份或者当您有多个项目时大量简化生活运行。如果你不使用virtualenv,上面的python-path可以完全删除。

+1

位置或目录指令都不能在.htaccess文件中使用。 – 2009-10-02 02:29:25