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/

DPress部署到SAE》有27个想法

  1. pylemon

    在phpmyadmin中导入本地syncdb后的数据库时,老是会遇到这个权限错误? 知道是什么状况么?

    — Dumping data for table `auth_group`

    LOCK TABLES `auth_group` WRITE ;
    MySQL 返回:
    #1044 – Access denied for user ‘lw4ozyn0mm_pma’@’10.67.15.%’ to database ‘app_pylemon’

  2. vicalloy 文章作者

    不知道你是怎么导出的,你不会是对整个数据库进行的导出吧。
    如果脚本里有创建数据库的操作应当会出现没有权限的问题。
    在syncdb后,进入app_dpress库。
    将app_dpress库中的所有表导出。
    另外mysql的数据库引擎用的是MyISAM,如果你用的是innodb也可能无法正常导入。

  3. vicalloy 文章作者

    如果你可以成功上次图片,那配置应当是没有问题的。
    最新版本已经修正了无法生产缩略图的问题,如果你用的不是最新版本的DPress,可以升级一次看看。

  4. wonder

    我除了没有修改 EPIC_JS 和 EPIC_BASEPATH, 没有collectstatic, 其他都照做了. 可老是失败呀!
    local.py中按您所说配置了sae的Mysql, 但是抛出的异常却说:
    ImproperlyConfigured(“Error loading either pysqlite2 or sqlite3 modules (tried in that order): %s” % exc)
    ImproperlyConfigured: Error loading either pysqlite2 or sqlite3 modules (tried in that order): No module named _sqlite3

    详细错误输出见: http://dpaste.com/hold/795783/

  5. vicalloy 文章作者

    看你的错误信息应当是 settings/local.py 没有正确创建或是加载时出了问题,不然数据库配置不会识别为sqlite。

  6. wonder

    我已经确定加载没有问题了, 因为你原来的代码如果加载有问题, 会忽略:
    try:
    from local import *
    except:
    pass
    我已经改成了:
    try:
    from local import ImportError:
    except:
    pass
    这样如果 local.py 出现问题就不会忽略了.

  7. wonder

    我已经确定加载没有问题了, 因为你原来的代码如果加载有问题, 会忽略:
    try:
    from local import *
    except:
    pass
    我已经改成了:
    try:
    from local import *:
    except ImportError:
    pass
    这样如果 local.py 出现问题就不会忽略了.

  8. wonder

    我怀疑是您提供的virtualenv.bundle.zip依赖补全, 我又加了一些包(包括 devserver,compressor等), 上传后提示的不是数据库配置错误了.
    但总是会出错, 我也看不出到底问题在哪儿.
    现在是: ImproperlyConfigured: Error importing middleware pagination.middleware: “No module named pagination.middleware”
    可是我发现 virtualenv.bundle.zip 有 pagination 包呀.

  9. vicalloy 文章作者

    virtualenv.bundle.zip 应当是没问题的。我在SAE上用的就是这个zip包。SAE上用非debug模式。创建一个settings/pre.py在里面添加 SETTINGS = ‘production’

  10. wonder

    OK, 我已经搞定了.
    关于数据库表的创建, 据说要用phpmyadmin, 可是SAE的文档中只字未提怎么操作的, 我也没用它.
    我是通过管理命令中的sqlall输出SQL语句, 然后直接贴到SAE的MySQL管理界面中执行的, 这样就OK了.

  11. wonder

    您好, 再次打扰!
    我通过您的这篇文章终于把FileBrowser和SAE集成的问题搞定了获悉您已经解决了Filebrowser生成缩略图的问题, 访问您提供的测试链接发现缩略托确实可以正常生成.
    但是我把最新的DPress代码(from github)部署到SAE后发现缩略图还是不能生成.
    不知是哪里配置错了, 我严格按您的说明来的呀.
    希望指点呀!

  12. vicalloy 文章作者

    代码库里的saestorage.py有bug,我刚更新过。
    你更新一下代码就好了。

  13. wonder

    我刚检出代码, 发现更改了一行.
    另外我曾在你的另一篇文章中反映过您实现的SAE存储目前还不支持重命名, 创建文件夹等操作呀.

  14. wonder

    已成功部署, 能够正常生成缩略图了, Filebrowser 提供的filebrowser.widgets.FileInput也能够正常渲染了, 惊喜!
    再次感谢前辈的努力!
    我本是想要把自己这几天刚刚完成的Blog系统EZLog部署到SAE上去的, 但一时未能成功. 正好发现了前辈的部署DPress到SAE的经验分享, 于是决定先尝试部署DPress测试.
    借助部署DPress到SAE的经验, 我已成功把我的EZLog系统部署到SAE上, 现在又解决了Filebrowser缩略图问题, 惊喜!
    我的EZLog本身还有许多工作要做, 不然我会自己抽时间研究下sae的storage API来解决FILE Storage的问题.
    我的EZLog部署在SAE上的域名是: http://ezlog.sinaapp.com/
    由于里面没有重要内容且不涉及隐私, 所以我创建了guest账户(密码还是guest)并赋予其超级用户权限. 管理后台URL是 /admin , 欢迎大家体验测试, 并给出改进意见. 谢谢!

  15. vicalloy 文章作者

    sae的api不支持创建文件夹,所以无法实现文件夹的相关功能。
    文件改名的功能因为不常用所以没太研究过,不确定是否可以实现。

  16. wonder

    文件改名我是有需求的, 因为我用了CKEditor, 可以利用Filebrowser浏览文件插入到文章中. 但如果文件名含有中文的话, 插入到文章中的图片链接就是错误的, 访问不了原图. 根据我的猜测可能是经过了多次URLEncode导致链接错误.

  17. wonder

    我那截图上已有的文件夹不是我在管理界面上手工添加的. 它对应我的一个django模型字段:
    photo = models.ImageField(verbose_name=u’图片’, max_length=200,
    upload_to=’uploads/plog/%Y/%m/%d’)

    图片上传后自动在sae Storage中创建了多层文件夹, 这说明你的saesotrage
    还是能够创建出文件夹的吧.
    是不是保存文件的时候, sae会自动根据 ‘/’ 分割路径并创建文件夹呢?

  18. wonder

    现在基本可以断定sae会根据 ‘/’ 创建递归目录, 但是没有直接创建目录的api, 建议通过写入一个空文件来实现创建目录. 如下所示:
    import sae.storage
    s = sae.storage.Client()
    ob = sae.storage.Object(”)
    s.put(‘domain-name’, ‘media/uploads/__empty__’, ob)

  19. wonder

    根据上面的思路, 我对您的saestorage进行了修改, 已经可以成功在filebrowser文件浏览页面创建文件夹, 在sae的storage管理界面可以查看到.
    filebrowser也提示创建成功, 但是filebrowser却列不出来. 我看了sae的Storage的list方法仅接受一个domain参数, 好像默认列出来的没有文件夹, 也没法控制列出目录还是普通文件呀. sae这API真是残废呀!

  20. vicalloy 文章作者

    SAE的后台管理界面无法上传大于大于10M的文件。大文件只能通过官方客户端上传,官方客户端又不支持文件夹。所以我觉得也太用去纠结文件夹的问题了。
    SAE的SDK确实不是太完善。

评论已关闭。