Django-compressor: Невозможно заставить это работать на Heroku

Созданный на 6 мар. 2014  ·  24Комментарии  ·  Источник: django-compressor/django-compressor

Поиск в Интернете не кажется прямым способом заставить это работать на героку.

Я подумал, что размещение всего на S3, как это рекомендуется для файлов heroku, было бы правильным. Затем я прочитал это: http://django-compressor.readthedocs.org/en/latest/remote-storages/
что все в порядке, но после этого он не говорит, каков результат. Я запускаю collectstatic, сжимаю, и то, и другое? Я делаю это локально или я позволяю хуку героку сделать это за меня? Или я на самом деле отключаю статическую сборку heroku, потому что у меня все равно нет lessc & co в среде heroku.

Так что, по крайней мере, это будет ошибка документации для этой страницы: http://django-compressor.readthedocs.org/en/latest/remote-storages/

В принципе, это должно работать и на героку, если вы создаете все в автономном режиме и проверяете их в своем контроле версий, верно?

Есть эти статьи о настройке узла и не только в среде 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

Самый полезный комментарий

Хорошо, вот что-то, что у меня работает и пережило перезапуск динамометра. Моими ключевыми целями здесь были: 1) отсутствие необходимости добавлять целую ситуацию сборки ruby/JS исключительно для моего конвейера ресурсов; 2) не нужно настраивать S3; 3) чтобы это происходило автоматически как часть развертывания, а не требовало локальных действий.

Так:

1) Настройте белый шум в соответствии с инструкциями 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, похоже, работает, и пережить перезапуск динамометра.)

Все 24 Комментарий

Не баг ;)

Но вопросов было много ;)

  • в большинстве сценариев загрузки я бы использовал dj-static (как видно из документации по героку ) или whitenoise для обслуживания статических файлов на героку.
  • если все настроено нормально, heroku запускает collectstatic для вас, когда вы отправляете свой код
  • если вы хотите добавить офлайн-сжатие, вы можете добавить скрипт post_compile (см. здесь ), который запускает сжатие для вас
  • не выполняйте локальное сжатие в автономном режиме, пусть heroku сделает это за вас.
  • для установки lessc на хероку другая задача, надо бы тоже погуглить и попробовать.. Но ваша первая ссылка выглядит многообещающе (по крайней мере скрипт post_compile ).

В разделе, указанном выше в разделе «Использование статических файлов», до сих пор не понятно, зачем вам нужно создавать свой собственный подкласс хранилища или что вам нужно делать после того, как вы это сделали.

Я попытался установить lessc на героку, но если указанный скрипт post_compile не работает напрямую, отладка чрезвычайно утомительна, и, честно говоря, создание контейнера со всем и кухонной раковиной не кажется хорошей идеей.

Удивлен, насколько это сложно, но если кто-нибудь скажет мне, что здесь происходит: http://django-compressor.readthedocs.org/en/latest/remote-storages/
Я буду рад добавить патч документации.

Я создал форк django-skel, который поддерживает django-compressor, компиляцию scss, беседку и кучу других вещей (и работает на героку). Кому-нибудь интересно посмотреть?

Я думаю, что людям определенно будет интересно увидеть то, что работает!

@therippa : мне бы тоже было интересно на это посмотреть.

Онлайн-режим Compressor не работает на Heroku, потому что Whitenoise проверяет статическую папку только при загрузке приложения (см. мой комментарий к проблеме № 680). Чтобы использовать компрессор в производстве, я думаю, вам нужно использовать его в автономном режиме и запустить python manage.py compress до того, как приложение загрузится, используя хук после компиляции Heroku. Heroku автоматически запустит сбор статики, так что это не проблема. Я нашел heroku-django-поваренную книгу полезной. Я использую TypeScript в своем приложении Django/Heroku, поэтому мне также нужно было установить узел и т. д. Это возможно с помощью хука после компиляции, пользовательского пакета pip или пользовательского пакета сборки. Я думаю, что хук после компиляции - самый простой способ.

Поскольку у меня была эта проблема в сочетании с сэкидзай, использовать автономное сжатие было невозможно. Но эта проблема на самом деле довольно легко решается путем расширения белого шума, поэтому вот мое решение: https://gist.github.com/Chronial/45ce9f33615a3b24c51f

Может быть, кто-то захочет добавить к этому какие-нибудь тесты и документацию и отправить в whitenoise надлежащий PR? :)

Примечание. Если вам все еще нужна предварительная генерация или героку, вы можете запустить сервер и отправить несколько запросов в свой хук post_build .

В документах Whitenoise упоминается django-compressor по адресу http://whitenoise.evans.io/en/stable/django.html#django -compressor.

OK. Это сработало для меня блестяще!
Внутри моего корневого локального каталога (также известного как репозиторий) я создал каталог 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

Хорошо, вот что-то, что у меня работает и пережило перезапуск динамометра. Моими ключевыми целями здесь были: 1) отсутствие необходимости добавлять целую ситуацию сборки ruby/JS исключительно для моего конвейера ресурсов; 2) не нужно настраивать S3; 3) чтобы это происходило автоматически как часть развертывания, а не требовало локальных действий.

Так:

1) Настройте белый шум в соответствии с инструкциями 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, похоже, работает, и пережить перезапуск динамометра.)

Решение @thatandromeda сработало для меня, большое спасибо!

@thatandromeda это решение может быть именно тем, что я ищу (после 12 часов перепробования множества вещей). Куда именно идет bin/post_compile? как мне его добавить? как мне сказать героку использовать его?

@manikos @thatandromeda Должен ли я запускать collectstatic до или после или и до, и после compress ? Моя команда управления сжатием говорит, что файл не найден:

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

@typistX Вам не нужно ничего говорить героку, он автоматически определяет, есть ли у вас каталог с именем bin в корне вашего проекта (репозиторий) и есть ли файл с именем post_compile (нет файла расширение) внутри.

@thatandromeda Ты только что спас меня после 3-х дней борьбы с этим дерьмом. 🙏🏼

Извините, что у вас есть эта борьба / рад, что я мог помочь!

@technolingo сжатие должно запускаться после collectstatic.

Оба решения, @thatandromeda и @manikos , сработали для меня, спасибо! 😃
Подтверждено, что это не ошибка, а просто отсутствие информации о процессе развертывания на Heroku, упоминание об этом где-нибудь в документации обязательно поможет.

Я буду рад просмотреть и объединить любую документацию по улучшению запросов на вытягивание. Ни у одного из активных сопровождающих нет учетной записи heroku, так что это действительно зависит от пользователей, которые могут предлагать изменения.

Будет ли здесь приветствоваться кнопка развертывания одним щелчком мыши на героку? или просто документ, посвященный развертыванию heroku?

@morenoh149 На мой взгляд, больше всего здесь нужна документация, может помочь «кнопка развертывания в один клик», но когда я искал _ошибку_, я хотел знать, в чем именно заключается проблема.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги