PythonTip >> 博文 >> Django

2010年10月09日

zihua 2014-01-16 18:01:08 点击: 861 | 收藏


在alwaysdata免费空间部署Django | Guobudong Online

折腾Django有段时间了,一直是在test server上测试来测试去。一个偶然的场合上,得知alwaysdata有免费的空间可以用,而且也符合我的要求(支持Django+PostgreSQL+apache),所以忙活了一个晚上,搬了上来。在这里做个记录,一来备忘,二来方便有兴趣的朋友查看。

 

首先要在alwaysdata上注册个账号,这个就不细说了。唯一需要提醒的是选择“Pack gratuit (10 Mo)”套餐,因为这是gratuit(免费)的。

打开http://admin.alwaysdata.com/login/,用你注册的mail地址及密码登录,如果看不懂法文的话,可以在左上角选择语言Chinese。进入之后,设置python, Django版本,开启ssh(默认是关闭的),设置ftp,ssh。到此为止,准备工作基本上完成了。

用ftp工具登录到ftp.alwaysdata.com, 把你的Django程序上传到www目录下,顺便提醒下,你的程序的组织结构最好是标准的,这样第一次部署会轻松点。如下:

 

view plaincopy to clipboardprint?
  1. yourproject/  
  2.     yourapp1/  
  3.     yourapp2/  
  4.     __init__.py  
  5.     manage.py  
  6.     settings.py  
  7.     urls.py  
  8.     README  

 

再用ssh工具(如secureCRT, putty),设置协议ssh2,端口22, 登录到ssh.alwaysdata.com, 在yourproject目录下,mkdir public, 在public目录下,创建文件django.fcgi,.htaccess(这2个文件最好在ssh中创建,如果在windows中创建的话,容易出现编码格式不兼容问题),内容如下:

django.fcgi

view plaincopy to clipboardprint?
  1.   
  2. import os, sys  
  3.   
  4. _PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  
  5. sys.path.insert(0, _PROJECT_DIR)  
  6. sys.path.insert(0, os.path.dirname(_PROJECT_DIR))  
  7.   
  8. _PROJECT_NAME = _PROJECT_DIR.split('/')[-1]  
  9. os.environ['DJANGO_SETTINGS_MODULE'] = "%s.settings" % _PROJECT_NAME  
  10.   
  11. from django.core.servers.fastcgi import runfastcgi  
  12. runfastcgi(method="threaded", daemonize="false")  

.htaccess
view plaincopy to clipboardprint?
  1. AddHandler fcgid-script .fcgi  
  2. RewriteEngine On  
  3. RewriteCond %{REQUEST_FILENAME} !-f  
  4. RewriteRule ^(.*)$ django.fcgi/$1 [QSA,L]  

 

如果需要使用Django admin控制面板的话,还需要在public目录下做个链接文件,注意不要与public中现有文件重名:

 

view plaincopy to clipboardprint?
  1. ln -s /usr/local/alwaysdata/python/django/1.1/django/contrib/admin/media/ media  

 

在alwaysdata admin中create一个新的PostgreSQL数据库yourdatabase作为你的站点数据库, 设置用户名yourname及密码yourpassword,并在settings.py中作相应设置:

 

view plaincopy to clipboardprint?
  1. DATABASE_ENGINE = 'postgresql_psycopg2'  
  2. DATABASE_NAME = 'yourdatabase'  
  3. DATABASE_USER = 'yourname'  
  4. DATABASE_PASSWORD = 'yourpassword'  
  5. DATABASE_HOST = 'postgresql.alwaysdata.com'  

 

另外所有meida文件,如js, css, pic等都需要放在public目录下,并在settings.py中做相应设置(具体参数视你的程序组织结构而定):

 

view plaincopy to clipboardprint?
  1. MEDIA_ROOT = join(myblog_path, 'public''resources''static')  
  2. ADMIN_MEDIA_ROOT = join(myblog_path,  'public''media')  
  3. MEDIA_URL = ROOT_URL + 'resources/'  

 

此外对django.fcgi 添加可执行属性:chmod +x django.fcgi.

最后还剩下一件事:同步数据库文件:

 

view plaincopy to clipboardprint?
  1. python manage.py syncdb  
  2. python manage.py migrate  

 

到此为止,全部设置完成。

在firefox中运行<yourname>.alwaysdata.net,看看效果吧。

法文原文Wiki,介绍在alwaysdata上部署Django的,请猛击

原文链接:http://my.oschina.net/rogerdai16/blog/8837

作者:zihua | 分类: Django | 标签: django | 阅读: 861 | 发布于: 2014-01-16 18时 |