【问题标题】:django-pipeline amazon s3 collectstatic file could not be founddjango-pipeline amazon s3 collectstatic 文件找不到
【发布时间】:2012-08-02 06:51:02
【问题描述】:

我正在使用具有此设置的 s3boto、django-pipeline 和 django-storages:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'utils.classutils.S3PipelineStorage'

MEDIA_ROOT = "/"
MEDIA_URL = '//s3.amazonaws.com/%s/' % AWS_STORAGE_BUCKET_NAME
STATIC_ROOT = '/static/'
STATIC_URL = '//s3.amazonaws.com/%s/static/' % AWS_STORAGE_BUCKET_NAME
STATICFILES_DIRS = (
    os.path.join(SITE_ROOT, 'assets'),
)

还有这个用于 django-pipeline 的自定义存储

from django.contrib.staticfiles.storage import CachedFilesMixin
from pipeline.storage import PipelineMixin
from storages.backends.s3boto import S3BotoStorage

class S3PipelineStorage(PipelineMixin, CachedFilesMixin, S3BotoStorage):
    pass

但我不断得到:

ValueError: The file 'project/head.png' could not be found with <utils.classutils.S3PipelineStorage object at 0x2163510>.

但是这个文件在任何地方都不存在!不在插件中,我尝试找到它,我检查了我的静态目录,尝试在管理员中找到它,我什至不记得使用过这样的文件!我试过findstatic,找不到文件。

我可能会错过什么?

【问题讨论】:

    标签: python django amazon-s3 django-staticfiles django-storage


    【解决方案1】:

    小贴士。我在设置 S3 以提供静态文件时遇到了这个问题。

    我想从 s3 提供静态内容,并继续处理上传到本地计算机上的媒体文件夹的文件。那时我所拥有的是一个在 s3 上的 css 文件中引用的图像,它指向媒体文件夹中的一个图像,例如 background: url(../media/some/image.png)

    很明显,在 s3 中找不到该文件,其相对路径在 css 中设置,上传失败。它在本地工作,但在从 s3 运行静态文件时不起作用。

    【讨论】:

    • 那你是怎么解决的?
    • @DmytriyVoloshyn 这只是设置正确的相对路径的问题。如果本地 hd 和 S3 的相对路径相同,您将永远不会遇到此问题。所以,我得到了错误,因为本地和远程的文件夹层次结构不同。我调整了它们,所以它们是一样的,然后它就起作用了。
    【解决方案2】:

    您当然有一个指向不存在的 'project/head.png' 文件的 css 文件,删除此引用,它应该可以工作。

    【讨论】:

    • 我在这里唯一要补充的是,在我的例子中 png 图像是从 css 的注释部分引用的(而我认为管道压缩器会跳过它们)
    猜你喜欢
    • 2018-04-24
    • 2013-08-27
    • 1970-01-01
    • 2018-09-19
    • 2017-02-21
    • 2015-01-02
    • 2012-08-02
    • 2021-05-03
    • 2018-02-19
    相关资源
    最近更新 更多