جانغو-ستوراجيس + سورل_ثومبنايل + س 3 لا تعمل بشكل جيد معا (عدم تطابق عناوين المواقع)

StackOverflow https://stackoverflow.com//questions/12659655

سؤال

أنا أستخدم مخازن جانغو و سورلثومبنايل معا وأنا أستخدم أمازون إس 3 لملفات ثابتة ووسائط.أنا باستخدام دلو واحد مع 2 المجلدات ، 1 ل ثابت و 1 لوسائل الإعلام.

هنا هو التكوين الخاص بي:

MEDIA_ROOT = '/media/'
MEDIA_URL = 'https://s3.amazonaws.com/my-bucket/media/'
STATIC_ROOT = '/static/'
STATIC_URL = 'https://s3.amazonaws.com/my-bucket/static/'
AWS_STORAGE_BUCKET_NAME = 'my-bucket'
DEFAULT_FILE_STORAGE = 'my_lib.s3utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE = 'my_lib.s3utils.StaticRootS3BotoStorage'

MediaRootS3BotoStorage و StaticRootS3BotoStorage يتم تعريفها على النحو التالي:

StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaRootS3BotoStorage = lambda: S3BotoStorage(location='media')

عندما أستخدم سورلثومبنايل ، توجد الصور المصغرة التي تم إنشاؤها في الدليل الصحيح: https://s3.amazonaws.com/my-bucket/media/cache ولكن عندما سورلثومبنايل يحاول استرداد صورة مصغرة موجودة بالفعل ، ورل ولدت هو: https://s3.amazonaws.com/my-bucket/cache, ، ستلاحظ أن media تم حذف المجلد.

هل لديك أي فكرة كيف يمكنني إصلاح ذلك?

وأنا أعلم أنني يمكن أن مجرد استخدام جانغو-ستوراجيس ولها بلدي ثابت وملفات الوسائط كلها مختلطة في دلو بلدي ، ولكن هذا قليلا قذرة جدا لذوقي:)

شكرا لك!

هل كانت مفيدة؟

المحلول

وكنت قادرا على انجاحه من خلال تحديد MediaRootS3BotoStorage و StaticRootS3BotoStorage على النحو التالي:

from storages.backends.s3boto import S3BotoStorage
from django.conf import settings

class StaticRootS3BotoStorage(S3BotoStorage):
    """
    Storage for static files.
    """

    def __init__(self, *args, **kwargs):
        kwargs['location'] = 'static'
        super(StaticRootS3BotoStorage, self).__init__(*args, **kwargs)


class MediaRootS3BotoStorage(S3BotoStorage):
    """
    Storage for uploaded media files.
    """

    def __init__(self, *args, **kwargs):
        kwargs['location'] = 'media'
        super(MediaRootS3BotoStorage, self).__init__(*args, **kwargs)

هذا الرابط يمكن أن يكون مفيدا https://github.com/jamstooks/django-s3-folder-storage

نصائح أخرى

كان لدي نفس المشكلة وتحليل سلمى حامد تحولت إلى اليمين بالنسبة لي.

قبل أن يكون لدينا giveacodicetagpre.

مما أدى إلى قيم "التخزين" خاطئة في طاولة Thumbnail_kvstore.لا يخلق تعريف Lambda هذا فئة جديدة وبالتالي اكتب (staticroots3botostorage ()) إرجاع "storages.back.s3boto.s3botostorage"، والذي يتم كتابته في الجدول.نظرا لأن قيم "التخزين" هذه تستخدم لإصدار إصدار في وقت لاحق التخزين للحصول على عناوين URL عند العرض عند العرض، نتجت ذلك S3Botostorage () المراد استخدامه لهذا الغرض.لذلك فقدت حجة "الموقع".

الحل من سلمى حامد يحدد هذه المخازن المخصصة كصفات تصحيح هذا.

شكرا لذلك!

هل حاولت إعداد Thumbnail_Prefix إلى الوسائط / ذاكرة التخزين المؤقت /؟

http://sorl-thumbnail.readthedocs.ORG / EN / LATH / SETCHIOND.HTML # Thumbnail-Prefix

كان لي نفس المشكلة بالضبط ولكن أنا أحسب وسيلة من حوله.

أنا وضعت بلدي DEFAULT_FILE_STORAGE العودة إلى storages.backends.s3boto.S3BotoStorage, ، بهذه الطريقة ، عندما بحثت عن cache/ انها لن تفوت ، وأنا لا تزال قادرة على تحميل جميع الملفات الخاصة بي ل media/, ، و python manage.py collectstatic لا يزال يعمل بشكل صحيح لأنه لا يزال لدي هذا النحو StaticRootS3BotoStorage = lambda: S3BotoStorage(location='static').

آمل أن يساعدك هذا ، لأن هذه المشكلة كانت تدفعني للجنون.

وجدت أن sorl-thumbnail هو إرجاع المخزن المؤقت KV صورة url باستخدام STATIC_URL (في الطلب التالي بعد إنشاء الصورة المصغرة الأولية).يظهر MEDIA_URL ليس له تأثير.

ليس الحل الأفضل.وأضاف أ S3 قاعدة التوجيه.

<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals>cache/</KeyPrefixEquals>
    </Condition>
    <Redirect>
      <ReplaceKeyPrefixWith>media/cache/</ReplaceKeyPrefixWith>
    </Redirect>
  </RoutingRule>
</RoutingRules>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top