Django-compressor: لا توجد طريقة لجعل هذا يعمل على Heroku

تم إنشاؤها على ٦ مارس ٢٠١٤  ·  24تعليقات  ·  مصدر: django-compressor/django-compressor

لا يبدو أن البحث عبر الويب هناك طريقة مباشرة لجعل هذا يعمل على heroku.

لقد اعتقدت أن وضع كل شيء على S3 كما هي الطريقة الموصى بها من heroku للملفات سيكون هو السبيل للذهاب. ثم قرأت هذا: http://django-compressor.readthedocs.org/en/latest/remote-storages/
وهذا كل شيء على ما يرام ولكن بعد القيام بذلك لا يوضح ما هي النتيجة. هل أقوم بتشغيل تجميع ، ضغط ، كليهما؟ هل أفعل ذلك محليًا أم أترك خطاف heroku يفعل ذلك من أجلي؟ أو هل أقوم في الواقع بتعطيل مجموعة heroku لأنني لا أملك أقل وشركاء في بيئة heroku على أي حال.

لذلك على الأقل سيكون هذا خطأ توثيق لهذه الصفحة: http://django-compressor.readthedocs.org/en/latest/remote-storages/

من حيث المبدأ ، يجب أن يعمل هذا على heroku أيضًا إذا قمت بإنشاء كل شيء في وضع عدم الاتصال وتحقق منه في التحكم في الإصدار ، أليس كذلك؟

توجد هذه المقالات حول إعداد العقدة وأقل في بيئة heroku ولكنها تبدو مفرطة بعض الشيء ولا تعمل في الواقع:
http://marklmiddleton.com/2013/using-less-with-django-on-heroku/
http://www.sore.nu/blog/2012/dec/30/fieldguide-django-bootstrap-less-coffeescript-and-/

هل أفتقد أي شيء هنا؟ بعد قضاء نصف يوم في هذا أمس ، استسلمت (البديل الواضح هو تجميع كل شيء محليًا باستخدام أدوات الواجهة الأمامية القياسية).

deployment

التعليق الأكثر فائدة

حسنًا ، هذا شيء يعمل بالنسبة لي وقد نجا من إعادة تشغيل dyno. كانت أهدافي الرئيسية هنا هي 1) عدم الحاجة إلى إضافة وضع buildpack كامل من الياقوت / JS فقط لخط أنابيب الأصول الخاص بي ؛ 2) عدم الحاجة إلى إعداد S3 ؛ 3) حدوث ذلك تلقائيًا كجزء من النشر بدلاً من طلب خطوات محلية.

وبالتالي:

1) قم بتكوين whitenoise وفقًا لتعليمات Heroku.

2) أضف django-libsass لمتطلباتك.

3) في ملف الإعدادات الخاص بك:

INSTALLED_APPS += ('compressor',)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'compressor.finders.CompressorFinder',
)

COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True

COMPRESS_PRECOMPILERS = (
    ('text/x-sass', 'django_libsass.SassCompiler'),
    ('text/x-scss', 'django_libsass.SassCompiler'),
)

4) أضف ملف bin/post_compile يحتوي على

python manage.py compress
python manage.py collectstatic --noinput

(لاحظ أن هذا يجب أن يكون في post_compile. لا يمكن أن يكون مهمة تحرير بسبب نظام الملفات سريع الزوال - الملفات التي تنشئها أثناء الضغط لن تظل ثابتة إذا قمت بتشغيلها في مهمة تحرير. ولكن يبدو أن تشغيلها في post_compile يعمل ، والبقاء على قيد الحياة إعادة تشغيل dyno.)

ال 24 كومينتر

ليس حشرة؛)

لكن كان هناك العديد من الأسئلة ؛)

  • في معظم سيناريوهات التحميل ، سأستخدم dj-static (كما هو موضح في مستندات heroku ) أو whitenoise لتقديم الملفات الثابتة على heroku.
  • إذا تم تكوين كل شيء بشكل جيد ، فإن heroku يعمل على collectstatic من أجلك عند دفع الكود الخاص بك
  • إذا كنت تريد إضافة ضغط دون اتصال ، فيمكنك إضافة برنامج نصي post_compile (انظر هنا ) يقوم بتشغيل الضغط نيابة عنك
  • لا تقم بالضغط محليًا في وضع عدم الاتصال ، دع heroku يقوم بذلك نيابة عنك.
  • لتثبيت lessc على heroku هي مهمة أخرى ، سأضطر إلى استخدام google والمحاولة أيضًا .. لكن رابطك الأول يبدو واعدًا (على الأقل نص post_compile ).

في القسم المرتبط أعلاه ضمن "استخدام الملفات الثابتة" ، لا تزال هناك فكرة عن سبب حاجتك إلى إنشاء فئة تخزين فرعية خاصة بك أو ما تحتاج إلى القيام به بعد القيام بذلك.

لقد حاولت تثبيت lessc على heroku ولكن إذا كان البرنامج النصي post_compile المعطى لا يعمل بشكل مباشر ، فإن تصحيح الأخطاء هذا أمر شاق للغاية وبصراحة لا يبدو إنشاء حاوية مع كل شيء وحوض المطبخ فكرة جيدة.

مندهش من مدى صعوبة هذا ، ولكن إذا أخبرني أي شخص بما يحدث هنا: http://django-compressor.readthedocs.org/en/latest/remote-storages/
يسعدني إضافة تصحيح التوثيق.

لقد صنعت شوكة من django-skel تدعم django-compressor ، وتجميع scss ، وتعريشة ، ومجموعة من الأشياء الأخرى (وتشغيلها على heroku). هل أي شخص مهتم برؤيتها؟

أعتقد أن الناس سيكونون مهتمين بالتأكيد برؤية الأشياء التي تعمل!

therippa : سأكون مهتمًا برؤية ذلك أيضًا.

لا يعمل وضع Compressor Online على Heroku لأن Whitenoise يتحقق فقط من المجلد الثابت عند تحميل التطبيق (انظر تعليقي على المشكلة رقم 680). لاستخدام الضاغط في الإنتاج ، أعتقد أنك بحاجة إلى استخدامه في وضع عدم الاتصال وتشغيل python manage.py compress قبل تحميل التطبيق باستخدام خطاف تجميع ما بعد Heroku. سيعمل Heroku تلقائيًا على تجميع البيانات الثابتة نيابة عنك ، لذا لا يمثل ذلك مشكلة. لقد وجدت كتاب الطبخ heroku-django مفيدًا. أنا أستخدم TypeScript في تطبيق Django / Heroku الخاص بي ، لذلك كنت بحاجة أيضًا إلى تثبيت العقدة وما إلى ذلك. وهذا ممكن عبر خطاف تجميع الرسائل ، أو حزمة نقطة مخصصة ، أو حزمة بناء مخصصة. أعتقد أن خطاف ما بعد الترجمة هو أسهل طريقة.

نظرًا لأنني واجهت هذه المشكلة مع sekizai ، فإن استخدام الضغط في وضع عدم الاتصال لم يكن حقًا خيارًا. ولكن تم إصلاح هذه المشكلة بسهولة تامة من خلال تمديد اللون الأبيض ، لذا فإليك الحل: https://gist.github.com/Chronial/45ce9f33615a3b24c51f

ربما يريد شخص ما إضافة بعض الاختبارات والوثائق لذلك وإرسال العلاقات العامة المناسبة إلى whitenoise؟ :)

ملاحظة: إذا كنت لا تزال تريد الجيل المسبق أو heroku ، فيمكنك بدء الخادم وإرسال بعض الطلبات في خطافك post_build .

تذكر مستندات Whitenoise django-compressor في http://whitenoise.evans.io/en/stable/django.html#django -compressor

نعم. هذا عمل لي ببراعة!
داخل الدليل المحلي الجذر الخاص بي (المعروف أيضًا باسم الريبو) ، قمت بإنشاء دليل bin/ وداخل ذلك ملف باسم post_compile . داخل الملف post_compile قمت بنسخ هذه البيانات ولصقها.
فعلت git add --all ، git commit -m 'testing post_receive hook in Heroku' ، git push heroku master .
بعد التشغيل التلقائي لأمر collectstatic بواسطة Heroku ، تم تشغيل python manage.py compress وقام بإنشاء دليل يحتوي على جميع ملفاتي مضغوطة في ملف واحد!

remote:      $ python manage.py collectstatic --noinput
remote:        1247 static files copied to '/app/staticfiles'.
remote: 
remote: -----> Running post-compile hook
remote: -----> Compressing static files
remote:        Found 'compress' tags in:
remote:         /app/templates/base/base.html
remote:         /app/templates/info/areas.html
remote:         /app/templates/info/profile.html
remote:        Compressing... done
remote:        Compressed 1 block(s) from 3 template(s) for 1 context(s).

إذا كنت ترى OfflineCompressionErrors ، فتحقق أيضًا من https://github.com/django-compressor/django-compressor/issues/443 حيث يقترح الأشخاص المزيد من الحلول.

في حالة # 831 ، ما نجح هو الضغط دون اتصال محليًا ، ودفع النتيجة بما في ذلك manifest.json إلى heroku. لا يوجد S3 هناك بالرغم من ذلك.

إليك تهيئة أخرى تعمل للمؤلف: https://github.com/django-compressor/django-compressor/issues/855#issuecomment -303294202

حسنًا ، هذا شيء يعمل بالنسبة لي وقد نجا من إعادة تشغيل dyno. كانت أهدافي الرئيسية هنا هي 1) عدم الحاجة إلى إضافة وضع buildpack كامل من الياقوت / JS فقط لخط أنابيب الأصول الخاص بي ؛ 2) عدم الحاجة إلى إعداد S3 ؛ 3) حدوث ذلك تلقائيًا كجزء من النشر بدلاً من طلب خطوات محلية.

وبالتالي:

1) قم بتكوين whitenoise وفقًا لتعليمات Heroku.

2) أضف django-libsass لمتطلباتك.

3) في ملف الإعدادات الخاص بك:

INSTALLED_APPS += ('compressor',)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'compressor.finders.CompressorFinder',
)

COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True

COMPRESS_PRECOMPILERS = (
    ('text/x-sass', 'django_libsass.SassCompiler'),
    ('text/x-scss', 'django_libsass.SassCompiler'),
)

4) أضف ملف bin/post_compile يحتوي على

python manage.py compress
python manage.py collectstatic --noinput

(لاحظ أن هذا يجب أن يكون في post_compile. لا يمكن أن يكون مهمة تحرير بسبب نظام الملفات سريع الزوال - الملفات التي تنشئها أثناء الضغط لن تظل ثابتة إذا قمت بتشغيلها في مهمة تحرير. ولكن يبدو أن تشغيلها في post_compile يعمل ، والبقاء على قيد الحياة إعادة تشغيل dyno.)

thatandromeda الحل نجح معي ، شكرا جزيلا!

thatandromeda قد يكون هذا الحل هو ما أبحث عنه (بعد 12 ساعة من تجربة الكثير من الأشياء). أين يذهب bin / post_compile بالضبط؟ كيف سأقوم بإضافته؟ كيف أخبر heroku باستخدامه؟

manikosthatandromeda هل يجب تشغيل collectstatic قبل أو بعد أو كليهما قبل وبعد compress ؟ يشير أمر إدارة الضغط إلى أن الملف غير موجود:

ValueError: The file 'css/font-awesome.min.css' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage object at 0x7f3e3fc3b828>.

typistX ليس عليك إخبار heroku بأي شيء ، فهو يكتشف تلقائيًا ما إذا كان لديك دليل يسمى bin في جذر مشروعك (repo) وإذا كان هناك ملف يسمى post_compile (لا يوجد ملف التمديد) في الداخل.

thatandromeda لقد أنقذتني للتو بعد 3 أيام من التعامل مع هذا الهراء. 🙏🏼

آسف لأنك تواجه هذا الصراع / سعيد لأنني استطعت المساعدة!

technolingo ، يجب تشغيل الضغط بعد التجميع.

كلا الحلين ، thatandromeda 's و manikos عمل بالنسبة لي ، شكرا لك! 😃
تم التأكيد على أن هذا ليس خطأ ، ولكنه مجرد نقص في المعلومات حول عملية النشر على Heroku ، مع الإشارة إلى أنه في مكان ما في الوثائق سيكون بالتأكيد مفيدًا.

يسعدني مراجعة ودمج أي طلب سحب لتحسين الوثائق. لا يمتلك أي من المشرفين النشطين حساب heroku ، لذا فإن هذا حقًا متروك للمستخدمين الذين يقومون باقتراح التغييرات.

هل سيكون زر النشر بنقرة واحدة على heroku موضع ترحيب هنا؟ أو مجرد وثيقة تخطو من خلال نشر heroku؟

@ morenoh149 من وجهة نظري ، أكثر ما نحتاج إليه هنا هو التوثيق ، وقد يساعد "زر نشر بنقرة واحدة" ولكن عندما كنت أبحث عن الخطأ _ أردت أن أعرف بالضبط ما هي المشكلة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات