1

我正在尝试将 Django CMS 项目部署到 Heroku。媒体将通过 Django Storages 和 Boto 从 S3 提供。目前唯一的媒体包括 Django CMS 图片插件(使用标准 ImageField)和 Aldryn 博客文章(使用 FilerImageField 和 easy_thumbnails)。

通过 Django Filer 向博客文章添加图像效果很好,但是在创建 Django CMS 图片插件时添加图像失败并出现 500 错误:

POST /en/admin/cms/page/edit-plugin/3/ HTTP/1.1
主机:192.168.1.104 :8000
连接:keep-alive
内容长度:72567
缓存控制:max-age=0
接受:text/html ,application/xhtml+xml,application/xml;q=0.9,image/webp, / ;q=0.8
来源: http://192.168.1.104:8000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome /35.0.1916.153 Safari/537.36
内容类型:multipart/form-data;边界=----WebKitFormBoundaryegTMPxZL74Wiukrg
引用:http://192.168.1.104:8000/en/admin/cms/page/edit-plugin/3/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: django_language=en; sessionid=wj7ayeia7rwggp​​xecatspe7lw5i12345;csrftoken=Pf342snoku6cdoRD6b9FCtxfqVQ12345

HTTP/1.0 500 内部服务器错误
日期:2014 年 7 月 13 日星期日 07:06:46 GMT
服务器:WSGIServer/0.1 Python/2.7.3
内容语言:en
过期时间:2014 年 7 月 13 日星期日 07:06:46 GMT
变化: Cookie
上次修改时间:星期日,2014 年 7 月 13 日 07:06:46 GMT
缓存控制:max-age=0
X-Frame-Options:SAMEORIGIN
内容类型:text/html

图像成功上传到 S3,插件在 CMS 中创建,但显示为<Empty>. 以下是我认为的相关设置:

'''
We use S3 as our media backend on Heroku, so set that up
'''
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'me'
AWS_SECRET_ACCESS_KEY = 'hunter2'
AWS_STORAGE_BUCKET_NAME = 'bucket'

'''
Adjust media URL to point directly to S3
'''
MEDIA_URL = 'http://bucket.s3.amazonaws.com/'

'''
Adjust thumbnail storage
'''
THUMBNAIL_DEFAULT_STORAGE = DEFAULT_FILE_STORAGE

此外,我可以以编程方式创建一个图片插件,它工作正常:

df = File(f)
p = Picture(language=u'en', plugin_type=u'PicturePlugin', level=0, lft=1, rght=2, tree_id=3, placeholder=ph)
p.image.save(name='test.png', content=df)
p.save()

任何关于我做错了什么的想法都将不胜感激,我被困住了。

编辑 1:感谢 mkoistinen 的回复,试图为您提供更多信息,但老实说,我对这些部分如何组合在一起有点困惑,所以我只是截取了屏幕截图。

插件创建表单:

表单处于错误状态一瞬间(我尝试单击“共享此回溯...”按钮但没有成功):

图像存储到 S3 并创建了一个 CMSPlugin(但不是图片):

响应为空,似乎也没有任何 JavaScript 错误:

编辑2:这个替换插件工作正常,不知道如何:

# djangocms_pic/cms_plugins.py

from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool

from models import Pic

class PicPlugin(CMSPluginBase):
    model = Pic
    name = 'Pic'
    render_template = 'pic_plugin.html'

plugin_pool.register_plugin(PicPlugin)

# djangocms_pic/models.py

from django.db import models

from cms.models import CMSPlugin

class Pic(CMSPlugin):
    image = models.ImageField(upload_to = CMSPlugin.get_media_path)

# djangocms_pic/templates/pic_plugin.html

<img src="{{ instance.image.url }}" />
4

0 回答 0