8.3创建数据库,命名为hello
使用SSH登陆
#注意:这不是最佳实践,为方便自动化部署,相关语句写在放在postinstall脚本可能更佳。
$ dotcloud ssh hello.db
mysql@hello-default-db-0:~$ mysql -v
mysql> CREATE DATABASE IF NOT EXISTS `hello`;
————–
CREATE DATABASE IF NOT EXISTS `hello`
————– Query OK, 1 row affected (0.01 sec) 8.4 回到本地继续编辑settings.py,修改如下 # Django settings for hello project.
import json
with open(‘/home/dotcloud/environment.json’) as f:
env = json.load(f) DEBUG = True
TEMPLATE_DEBUG = DEBUG ADMINS = (
# (‘Your Name’, ‘your_email@domain.com’),
) MANAGERS = ADMINS DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’, # Add ‘postgresql_psycopg2′, ‘postgresql’, ‘mysql’, ‘sqlite3′ or ‘oracle’.
‘NAME’: ‘hello’, # Or path to database file if using sqlite3.
‘USER’: env['DOTCLOUD_DB_MYSQL_LOGIN'], # Not used with sqlite3.
‘PASSWORD’: env['DOTCLOUD_DB_MYSQL_PASSWORD'], # Not used with sqlite3.
‘HOST’: env['DOTCLOUD_DB_MYSQL_HOST'], # Set to empty string for localhost. Not used with sqlite3.
‘PORT’: env['DOTCLOUD_DB_MYSQL_PORT'], # Set to empty string for default. Not used with sqlite3.
}
} # Local time zone for this installation. Choices can be found here:
#…
为了使用管理界面,我们开启admin app INSTALLED_APPS = (
‘django.contrib.auth’,
‘django.contrib.contenttypes’,
‘django.contrib.sessions’,
‘django.contrib.sites’,
‘django.contrib.messages’,
# Uncomment the next line to enable the admin:
‘django.contrib.admin’, #去除前面的#号
# Uncomment the next line to enable admin documentation:
# ‘django.contrib.admindocs’,
)
8.5 打开hello/urls.py文件,去除以下行的注释 #from django.contrib import admin
#admin.autodiscover() #(r’^admin/’, include(admin.site.urls)) 8.6用postinstall自动调用syscdb
在mydjango下新建文件postinstall(注意编码为ANSI,否则有可能部署失败),并写入以下内容: #!/bin/sh
python hello/manage.py syncdb –noinput
python mkadmin.py #下面用到 再新建 mkadmin.py,写入以下内容, #!/usr/bin/env python
from wsgi import *
from django.contrib.auth.models import User
u, created = User.objects.get_or_create(username=’admin’)
if 创建时间:
u.set_password(‘password’)
u.is_superuser = True
u.is_staff = True
u.save() 以上脚本创建了一个用户名为admin,密码为password的超级用户
执行一次push后可以键入 http://www.onepythoner.tk/admin/即可看到不带样式的登录管理界面 ——————————————-
9.处理静态文件和媒体资源
首先在settings.py中指定
STATIC_ROOT, STATIC_URL, MEDIA_ROOT, and MEDIA_URL. 我们把静态文件放置在/home/dotcloud/data目录下,因为data目录的数据在每次push中保持永久不变。如果文件放置在code或current目录下可能会在代码push后被擦除。 修改settings.py相关常量,貌似1.2.x的django并不区分MEDIA与STATIC MEDIA_ROOT = ‘/home/dotcloud/data/media/’
MEDIA_URL = ‘/media/’
STATIC_ROOT = ‘/home/dotcloud/data/static/’
STATIC_URL = ‘/static/’
ADMIN_MEDIA_PREFIX = ‘/static/admin/’ 在mydjango下新建 nginx.conf
写入以下内容
location /media/ { root /home/dotcloud/data ; }
location /static/ { root /home/dotcloud/data ; } 编辑postinstall,追加以下内容
mkdir -p /home/dotcloud/data/media /home/dotcloud/data/static
python hello/manage.py collectstatic –noinput 执行一次push
——————————————- CSS和javascript还是没有办法加载,原因是1.2.x的静态文件处理跟1.3+的有所不同,在Django1.3+里,MEDIA跟STATIC是分离的, MEDIA是存放用户上传的文件,Static是用来存放收集文件,而推荐用来放站点css,javascript的是app下的static目录。 而且这里有个问题,如果要使用SAE或者GAE这类代码文件跟静态文件放在不同的服务器,不同URL的主机,处理起来也可能不一样,1.3+好歹也算有个collectstatic命令可以提取静态文件,1.2.x要怎么处理? ——————————————-
暂时使用这样的解决方法,用pip安装django-staticfiles,django1.3+只不过是把这个app集成进去了,而用pip也可以实现独立安装,甚至版本可能会比最新Django发行的要高。
参考:http://pypi.python.org/pypi/django-staticfiles/ 安装方法很简单,即把django-staticfiles写入requirements.txt里,再执行一次
pip install -r ~/mydjango/requirements.txt 修改settings.py
INSTALL_APPS =[
#...
"staticfiles",
] 向postinstall加入 ,后面的参数一定是–noinput
python hello/manage.py collectstatic –noinput
push代码后 或者,如果想要交互执行,可SSH到服务器 $ dotcloud ssh hello.www
$ cd code
$ python hello/manage.py collectstatic
这时会询问是否执行,输入yes后脚本开始执行 输入http://www.onepythoner.tk/admin/,即可看到效果,静态文件得到正确的解析,至此大功告成
——————————————-
|