Django-compressor: Tidak ada cara untuk membuatnya bekerja di Heroku

Dibuat pada 6 Mar 2014  ·  24Komentar  ·  Sumber: django-compressor/django-compressor

Mencari di sekitar web sepertinya tidak ada cara langsung untuk membuatnya berfungsi di heroku.

Saya pikir meletakkan semuanya di S3 seperti cara yang direkomendasikan heroku untuk file akan menjadi cara yang tepat. Kemudian saya membaca ini: http://django-compressor.readthedocs.org/en/latest/remote-storages/
yang semuanya baik-baik saja tetapi setelah melakukan itu tidak mengatakan apa hasilnya. Apakah saya menjalankan collectstatic, kompres, keduanya? Apakah saya melakukannya secara lokal atau membiarkan heroku push hook melakukannya untuk saya? Atau apakah saya sebenarnya menonaktifkan heroku collectstatic karena saya tidak memiliki lessc &co di lingkungan heroku.

Jadi setidaknya ini akan menjadi bug dokumentasi untuk halaman ini: http://django-compressor.readthedocs.org/en/latest/remote-storages/

Pada prinsipnya ini harus bekerja pada heroku juga jika Anda membuat semuanya secara offline dan memeriksanya ke kontrol versi Anda, bukan?

Ada artikel tentang menyiapkan node dan less di lingkungan heroku tetapi tampaknya agak berlebihan dan sebenarnya tidak berfungsi:
http://marklmiddleton.com/2013/using-less-with-Django-on-heroku/
http://www.sore.nu/blog/2012/dec/30/fieldguide-Django-bootstrap-less-coffeescript-and-/

Apakah saya kehilangan sesuatu di sini? Setelah menghabiskan setengah hari untuk ini kemarin saya menyerah (alternatif yang jelas adalah mengkompilasi semuanya secara lokal menggunakan alat ujung depan standar).

deployment

Komentar yang paling membantu

Oke, inilah sesuatu yang berfungsi untuk saya dan selamat dari dyno restart. Tujuan utama saya di sini adalah 1) tidak perlu menambahkan seluruh situasi buildpack Ruby/JS hanya untuk saluran aset saya; 2) tidak perlu menyiapkan S3; 3) membuatnya terjadi secara otomatis sebagai bagian dari penerapan daripada membutuhkan langkah-langkah lokal.

Jadi:

1) Konfigurasi whitenoise sesuai dengan instruksi Heroku.

2) tambahkan django-libsass ke kebutuhan Anda.

3) Dalam file pengaturan Anda:

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) Tambahkan file bin/post_compile yang berisi

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

(Perhatikan bahwa ini harus di post_compile. Ini tidak bisa menjadi tugas rilis karena sistem file fana - file yang Anda hasilkan selama kompresi tidak akan bertahan jika Anda menjalankannya dalam tugas rilis. Tetapi menjalankannya di post_compile tampaknya berhasil, dan untuk bertahan dyno restart.)

Semua 24 komentar

Bukan bug ;)

Tapi ada banyak pertanyaan ;)

  • di sebagian besar skenario beban saya akan menggunakan dj-static (seperti yang terlihat di heroku docs ) atau whitenoise untuk menyajikan file statis di heroku.
  • jika semuanya dikonfigurasi dengan baik, heroku menjalankan collectstatic untuk Anda ketika Anda menekan kode Anda
  • jika Anda ingin menambahkan kompresi offline, Anda dapat menambahkan skrip post_compile (lihat di sini ) yang menjalankan kompres untuk Anda
  • jangan kompres offline secara lokal, biarkan heroku melakukan ini untuk Anda.
  • untuk menginstal lessc pada heroku adalah tugas lain, saya harus google dan mencoba juga .. Tapi link pertama Anda terlihat menjanjikan (setidaknya script post_compile ).

Di bagian yang ditautkan di atas di bawah "Menggunakan staticfiles" masih tidak tahu mengapa Anda perlu membuat subkelas penyimpanan Anda sendiri atau apa yang perlu Anda lakukan setelah melakukannya.

Saya mencoba menginstal lessc di heroku tetapi jika skrip post_compile yang diberikan tidak berfungsi secara langsung, ini sangat membosankan untuk di-debug dan terus terang sepertinya bukan ide yang baik untuk membuat wadah dengan segala sesuatu dan wastafel dapur.

Kagum pada betapa sulitnya ini, tetapi jika ada yang memberi tahu saya apa yang terjadi di sini: http://django-compressor.readthedocs.org/en/latest/remote-storages/
Saya akan dengan senang hati menambahkan tambalan dokumentasi.

Saya membuat garpu Django-skel yang mendukung Django-compressor, kompilasi scss, bower, dan banyak hal lainnya (dan menjalankannya di heroku). Apakah ada yang tertarik melihatnya?

Saya pikir orang pasti akan tertarik melihat hal-hal yang berhasil!

@therippa : Saya juga tertarik untuk melihatnya.

Mode Kompresor Online tidak berfungsi di Heroku karena Whitenoise hanya memeriksa folder statis saat aplikasi dimuat (lihat komentar saya tentang masalah #680). Untuk menggunakan kompresor dalam produksi, saya pikir Anda perlu menggunakannya dalam mode Offline dan menjalankan python manage.py compress sebelum aplikasi dimuat menggunakan kait kompilasi posting Heroku. Heroku akan secara otomatis menjalankan collect static untuk Anda sehingga tidak menjadi masalah. Saya menemukan heroku-Django-cookbook membantu. Saya menggunakan TypeScript pada aplikasi Django/Heroku saya jadi saya juga perlu menginstal node dll. Ini dimungkinkan melalui kait kompilasi posting, paket pip kustom, atau paket build kustom. Saya pikir kait kompilasi posting adalah cara termudah.

Karena saya memiliki masalah ini dalam kombinasi dengan sekizai, menggunakan kompresi offline sebenarnya bukan pilihan. Tetapi masalah ini sebenarnya cukup mudah diperbaiki dengan memperpanjang whitenoise, jadi inilah solusi saya: https://Gist.github.com/Chronial/45ce9f33615a3b24c51f

Mungkin seseorang ingin menambahkan beberapa tes dan dokumentasi untuk itu dan mengirim PR yang tepat ke whitenoise? :)

Catatan: Jika Anda masih menginginkan pra-generasi atau heroku, Anda dapat memulai server dan mengirim beberapa permintaan di hook post_build Anda.

Dokumen whitenoise menyebutkan Django-compressor di http://whitenoise.evans.io/en/stable/django.html#django -compressor

OKE. Ini bekerja untuk saya dengan cemerlang!
Di dalam direktori lokal root saya (alias repo) saya membuat direktori bin/ dan di dalamnya sebuah file bernama post_compile . Di dalam file post_compile saya copy-paste data ini.
Saya melakukan git add --all , git commit -m 'testing post_receive hook in Heroku' , git push heroku master .
Setelah menjalankan perintah collectstatic secara otomatis oleh Heroku, itu menjalankan python manage.py compress dan itu membuat direktori yang berisi semua file saya yang dikompresi dalam satu file!

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).

jika Anda melihat OfflineCompressionErrors, periksa juga https://github.com/django-compressor/django-compressor/issues/443 di mana orang menyarankan lebih banyak solusi.

dalam kasus #831, yang berhasil adalah melakukan kompresi offline secara lokal, dan mendorong hasilnya termasuk manifest.json ke heroku. tidak ada S3 di sana.

di sini adalah konfigurasi lain yang berfungsi untuk penulis: https://github.com/Django-compressor/Django-compressor/issues/855#issuecomment -303294202

Oke, inilah sesuatu yang berfungsi untuk saya dan selamat dari dyno restart. Tujuan utama saya di sini adalah 1) tidak perlu menambahkan seluruh situasi buildpack Ruby/JS hanya untuk saluran aset saya; 2) tidak perlu menyiapkan S3; 3) membuatnya terjadi secara otomatis sebagai bagian dari penerapan daripada membutuhkan langkah-langkah lokal.

Jadi:

1) Konfigurasi whitenoise sesuai dengan instruksi Heroku.

2) tambahkan django-libsass ke kebutuhan Anda.

3) Dalam file pengaturan Anda:

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) Tambahkan file bin/post_compile yang berisi

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

(Perhatikan bahwa ini harus di post_compile. Ini tidak bisa menjadi tugas rilis karena sistem file fana - file yang Anda hasilkan selama kompresi tidak akan bertahan jika Anda menjalankannya dalam tugas rilis. Tetapi menjalankannya di post_compile tampaknya berhasil, dan untuk bertahan dyno restart.)

@thatandromeda solusi bekerja untuk saya, terima kasih banyak!

@thatandromeda solusi ini mungkin yang saya cari (Setelah 12 jam mencoba banyak hal). Ke mana tepatnya bin/post_compile pergi? bagaimana saya akan menambahkannya? bagaimana cara memberitahu heroku untuk menggunakannya?

@manikos @thatandromeda Haruskah saya menjalankan collectstatic sebelum atau sesudah atau keduanya sebelum dan sesudah compress ? Perintah manajemen kompres saya mengatakan file tidak ditemukan:

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

@typistX Anda tidak perlu memberi tahu heroku apa pun, itu secara otomatis mendeteksi jika Anda memiliki direktori bernama bin di root proyek Anda (repo) dan jika ada file bernama post_compile (tidak ada file ekstensi) di dalam.

@thatandromeda Anda baru saja menyelamatkan saya setelah 3 hari berurusan dengan omong kosong ini. 🙏🏼

Maaf Anda mengalami kesulitan ini / senang saya bisa membantu!

@technolingo kompres perlu dijalankan setelah collectstatic.

Kedua solusi, @thatandromeda 's dan @manikos 's bekerja untuk saya, terima kasih! 😃.
Dikonfirmasi bahwa ini bukan bug, tetapi hanya kurangnya informasi tentang proses penyebaran di Heroku, menyebutkannya di suatu tempat di dokumentasi pasti akan membantu.

Saya akan dengan senang hati meninjau dan menggabungkan dokumentasi peningkatan permintaan tarik. Tidak ada pengelola aktif yang memiliki akun heroku, jadi ini terserah pengguna yang menyarankan perubahan.

apakah tombol penyebaran 1-klik ke heroku diterima di sini? atau hanya sebuah dokumen yang melangkah melalui penyebaran heroku?

@morenoh149 Dalam pandangan saya, apa yang paling dibutuhkan di sini adalah dokumentasi, "tombol penyebaran 1-klik" dapat membantu tetapi ketika saya mencari _the bug_ saya ingin tahu apa sebenarnya masalahnya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat