标签归档:SAE

DPress部署到SAE

将DPress部署到SAE的简要说明。如果你在部署过程中有遇到什么问题,欢迎反馈。

  • 在SAE管理后台创建应用,开发语言选择python
  • 使用svn将应用代码更新到本地
  • 修改配置文件config.yaml
name: 你的应用名称
version: 1
libraries:
- name: django
  version: "1.4"
  • 将DPress sites目录下所有文件复制到SAE应用目录(如:dpress/1/)。
  • 在应用的根目录下创建目录libs(如:dpress/1/libs/)
  • 将virtualenv.bundle.zip复制到libs目录
  • 在服务管理中启用mysql数据库
  • 由于SAE上无法使用Django命令。需要在本地使用syncdb命令在本地mysql数据库中创建好DPress的初始数据,然后使用SAE的phpmyadmin将数据导入到SAE。
  • 在服务管理中创建Storage,并将Domain设置为base
  • 创建配置文件settings/local.py
# -*- coding: UTF-8 -*-
import sae.const
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': sae.const.MYSQL_DB,                      # Or path to database file if using sqlite3.
        'USER': sae.const.MYSQL_USER,                      # Not used with sqlite3.
        'PASSWORD': sae.const.MYSQL_PASS,                  # Not used with sqlite3.
        'HOST': sae.const.MYSQL_HOST,                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': sae.const.MYSQL_PORT,                      # Set to empty string for default. Not used with sqlite3.
    }
}
DEFAULT_FILE_STORAGE = 'saestorage.SaeStorage'
FILEBROWSER_DIRECTORY = ''
STATIC_URL = 'http://vicalloy.sinaapp.com/dpress/'#修改为你静态资源位置
DPRESS_TITLE = u'天地一沙鸥'
DPRESS_SUBTITLE = u'to be continue'
DPRESS_DESCN = ''
DISQUS_SHORTNAME = ''
GOOGLE_ANALYTICS_CODE = ''
#根据你的静态资源位置进行修改
EPIC_JS = 'http://vicalloy.sinaapp.com/dpress/dpress/epiceditor/js/epiceditor.min.js'
EPIC_BASEPATH = 'http://vicalloy.sinaapp.com/dpress/dpress/epiceditor'

  • 到这里服务已经可以跑起来了。由于没有对静态资源进行配置,将出现无法找到静态资源的情况。
  • 创建一个新的SAE应用,应用类型选择PHP,专门用于管理DPress的静态资源文件(如:dstatic.sinaapp.com)。
  • 在本地运行Django的collectestatic命令将DPress的静态资源收集到sites/collectedstatc/目录。
  • 将collectedstatc中的内容复制到新创建的站点
    • 如:static/dpress/。对应的STATIC_URL配置文件修改为 http://dstatic.sinaapp.com/static/dpress/

SAE Storage for Django

DPress 修正后想着要部署一个在线的演示程序。问题是我自己虚拟主机的资源已经捉襟见肘,于是只能打SAE的主意了。
为保证文件上传功能的正常使用需要将Django默认的Storage实现替换为SAE的storage实现。SAE的官方并没有提供Django的storage实现,需要自己另外实现。在github:gist上有人贴出了SAE Storage for Django的实现(SAE Storage for Django)。github:gist上的这个SAE Storage实现有些bug,我修正后的版本见saestorage
注:

  • SAE Storage单节点的最大容量为2G(注:SAE Storage 服务限制)。这对于一些小站点来说是没什么问题,但如果是一个大型的商业站点这必然会有些不便。难道你需要配置一个storage列表,让程序自行去寻找可用的storage?
  • SAE Storage似乎不太稳定,上传的文件经常会打不开。

使用反向代理为SAE“绑定”顶级域名

朋友的VPS服务器近期经常出现内存超标的问题。想我的SAE免费资源闲着也是闲着,于是将上面的博客迁移到SAE平台。
SAE商店中的wordpress可以免费安装使用。受SAE平台的限制,SAE版的wordpress有部分功能限制,比如可用的主题也就那么2~3款。另外一个比较大的问题是无法绑定域名。解决该问题的方法之一即是使用反向代理。
我的虚拟主机上用的是apache,下面是相关设置。
httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

.htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^(.*)$ http://domain.sinaapp.com/$1 [P]

SAE部署Django1.3应用问题总汇

花了些工夫将碎片网部署到了SAE,中途遇到各类问题。感觉SAE看上去很美,实际上却并不是太成熟(至少python版如此)。
下面记录下我遇到的一些主要问题以及解决方法。

django版本问题

Django1.4都即将发布了,SAE平台自带的SAE版本依旧为1.2x。为使用django1.3版本,你需上传自己的django。具体做法可参考SAE手册中的runtime.html#virtualenv

日志模块出错

最先遇到的是日至模块的问题。错误显示AdminEmailHandler中构造某个类时带了is_mail这个参数,但目标类的构造函数根本就不支持。好在日至模块不是必须。将日至处理模块换成django.utils.log.NullHandler解决问题。

'null’: { 'level’:'DEBUG’, 'class’:'django.utils.log.NullHandler’, },

local_thread问题

在index.wsgi中加入

import threading
from django.utils import _threading_local
threading.local = _threading_local.local

settings文件

SAE默认安装了不少python包,其中包括django-userena。糟糕的是SAE将django-userena的demo项目也加到了python路径,而且加载的优先级比项目代码还高。直接导致os.environ[‘DJANGO_SETTINGS_MODULE’] = ‘settings’找到的是userena的settings文件。最终将settings文件改名为qnotes_settings.py解决该问题。

其他问题

  • 昨天部署上线后经常出现数据库错误,错误提示为Caught OperationalError while rendering: (1045, ‘access deny’)  。SAE数据库不支持长连接,30s后主动超时。但django本就会在每次请求后自动关闭数据库连接,理论上不应当出现类似问题。该问题今天莫名其妙的自己好了。
  • 服务器非常不稳定,经常长时间的无法访问,不定期的可以正常访问。
  • SAE可能hack了python的包加载机制的原因,SAE的python包的加载行为有些奇怪。本应当最先加载当前目录下的包,实际上却不一定。

收到SAE的开发者证书了

前段时间SAE开始分发python的内测名额,一时手慢,错过机会。不过倒看到SAE可以申请开发者证书。申请资格中写有开源作者可以申请高级开发者证书。由于错过内测名额,所以就有啥拿啥吧。
感觉SAE的这次营销策划想法非常的好。可以花很少的钱就可以做到不错的推广效果,最重要的是还能得到一个皆大欢喜的结果。
PS:
申请一个SAE证书还是有些好处的。申请成高级开发者后,每年可以有¥1800的免费SAE资源可以使用。