将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目录
- 注:virtualenv.bundle.zip为python的第三方依赖包
- 下载 virtualenv.bundle
- 在服务管理中启用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/
在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’
不知道你是怎么导出的,你不会是对整个数据库进行的导出吧。
如果脚本里有创建数据库的操作应当会出现没有权限的问题。
在syncdb后,进入app_dpress库。
将app_dpress库中的所有表导出。
另外mysql的数据库引擎用的是MyISAM,如果你用的是innodb也可能无法正常导入。
在后台缩略图还是无法显示
不过不影响使用
如果你可以成功上次图片,那配置应当是没有问题的。
最新版本已经修正了无法生产缩略图的问题,如果你用的不是最新版本的DPress,可以升级一次看看。
我除了没有修改 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/
过了一会儿执行, 错误代码好像不太一样:
http://dpaste.com/hold/795787/
看你的错误信息应当是 settings/local.py 没有正确创建或是加载时出了问题,不然数据库配置不会识别为sqlite。
我已经确定加载没有问题了, 因为你原来的代码如果加载有问题, 会忽略:
try:
from local import *
except:
pass
我已经改成了:
try:
from local import ImportError:
except:
pass
这样如果 local.py 出现问题就不会忽略了.
我已经确定加载没有问题了, 因为你原来的代码如果加载有问题, 会忽略:
try:
from local import *
except:
pass
我已经改成了:
try:
from local import *:
except ImportError:
pass
这样如果 local.py 出现问题就不会忽略了.
我怀疑是您提供的virtualenv.bundle.zip依赖补全, 我又加了一些包(包括 devserver,compressor等), 上传后提示的不是数据库配置错误了.
但总是会出错, 我也看不出到底问题在哪儿.
现在是: ImproperlyConfigured: Error importing middleware pagination.middleware: “No module named pagination.middleware”
可是我发现 virtualenv.bundle.zip 有 pagination 包呀.
virtualenv.bundle.zip 应当是没问题的。我在SAE上用的就是这个zip包。SAE上用非debug模式。创建一个settings/pre.py在里面添加 SETTINGS = ‘production’
OK, 我已经搞定了.
关于数据库表的创建, 据说要用phpmyadmin, 可是SAE的文档中只字未提怎么操作的, 我也没用它.
我是通过管理命令中的sqlall输出SQL语句, 然后直接贴到SAE的MySQL管理界面中执行的, 这样就OK了.
您好, 再次打扰!
我通过您的这篇文章终于把FileBrowser和SAE集成的问题搞定了获悉您已经解决了Filebrowser生成缩略图的问题, 访问您提供的测试链接发现缩略托确实可以正常生成.
但是我把最新的DPress代码(from github)部署到SAE后发现缩略图还是不能生成.
不知是哪里配置错了, 我严格按您的说明来的呀.
希望指点呀!
这是我把DPress部署到SAE上的Filebrowser URL(user=guest, passwd=guest), 您可以看下效果.
http://wonderlog.sinaapp.com/admin/filebrowser/browse/
已经用了最新代码了, 可还是不能生成缩略图.
代码库里的saestorage.py有bug,我刚更新过。
你更新一下代码就好了。
好, 马上更新!
谢谢前辈的不懈努力!
谢谢前辈做出的伟大贡献. 特别是和Filebrowser的集成上.
我刚检出代码, 发现更改了一行.
另外我曾在你的另一篇文章中反映过您实现的SAE存储目前还不支持重命名, 创建文件夹等操作呀.
已成功部署, 能够正常生成缩略图了, 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 , 欢迎大家体验测试, 并给出改进意见. 谢谢!
sae的api不支持创建文件夹,所以无法实现文件夹的相关功能。
文件改名的功能因为不常用所以没太研究过,不确定是否可以实现。
文件改名我是有需求的, 因为我用了CKEditor, 可以利用Filebrowser浏览文件插入到文章中. 但如果文件名含有中文的话, 插入到文章中的图片链接就是错误的, 访问不了原图. 根据我的猜测可能是经过了多次URLEncode导致链接错误.
我没有看sae的API,我发现sae提供的管理界面可以在Stroage中创建文件夹的.
这里有截图: http://www.yupoo.com/photos/sinaweibo1451234405/86596328/. 难道没有通过api提供给开发者.
我那截图上已有的文件夹不是我在管理界面上手工添加的. 它对应我的一个django模型字段:
photo = models.ImageField(verbose_name=u’图片’, max_length=200,
upload_to=’uploads/plog/%Y/%m/%d’)
图片上传后自动在sae Storage中创建了多层文件夹, 这说明你的saesotrage
还是能够创建出文件夹的吧.
是不是保存文件的时候, sae会自动根据 ‘/’ 分割路径并创建文件夹呢?
有可能sae会自动根据“/”创建文件夹,API里没有给出相关的说明。
SAE的API在这里:
http://appstack.sinaapp.com/static/doc/release/testing/service.html#storage
感觉SAE的API并不是太完善。
现在基本可以断定sae会根据 ‘/’ 创建递归目录, 但是没有直接创建目录的api, 建议通过写入一个空文件来实现创建目录. 如下所示:
import sae.storage
s = sae.storage.Client()
ob = sae.storage.Object(”)
s.put(‘domain-name’, ‘media/uploads/__empty__’, ob)
根据上面的思路, 我对您的saestorage进行了修改, 已经可以成功在filebrowser文件浏览页面创建文件夹, 在sae的storage管理界面可以查看到.
filebrowser也提示创建成功, 但是filebrowser却列不出来. 我看了sae的Storage的list方法仅接受一个domain参数, 好像默认列出来的没有文件夹, 也没法控制列出目录还是普通文件呀. sae这API真是残废呀!
SAE的后台管理界面无法上传大于大于10M的文件。大文件只能通过官方客户端上传,官方客户端又不支持文件夹。所以我觉得也太用去纠结文件夹的问题了。
SAE的SDK确实不是太完善。