Soru ./Manage.py, Heroku dağıtımı sırasında çalışıyor


Bir Django uygulaması üzerinde çalışıyorum ve veritabanı geçişlerimin Heroku'da konuşlandırırken çalıştırılmasını istiyorum.

Şimdiye kadar basitçe aşağıdaki komutu Procfile'a koyduk:

python manage.py migrate

Göçler dağıtılırken gerçekten çalışırlar, ancak her dyno için bir kez çalıştırılırlar (ve birkaç dynos kullanırız). Sonuç olarak, veri geçişleri (salt şema geçişlerinin aksine) birkaç kez çalıştırılır ve veriler çoğaltılır.

Koşu heroku run python manage.py migrate Dağıtımın tatmin edici olmaması nedeniyle veritabanının her zaman kodla senkronize olmasını istiyoruz.

Bunu Heroku'da yapmanın doğru yolu nedir?

Teşekkürler.


25
2018-04-04 18:26


Menşei




Cevaplar:


Bu benim Procfile ve tam olarak açıkladığınız gibi çalışıyor:

release: python manage.py migrate
web: run-program waitress-serve --port=$PORT settings.wsgi:application

Bir sürüm işlemini tanımlamak için Heroku dokümanlarına bakın: https://devcenter.heroku.com/articles/release-phase#defining-a-release-command

Serbest bırakma komutu, bir sürüm oluşturulduktan hemen sonra, ancak sürüm, uygulamanın dyno oluşumuna dağıtılmadan önce çalıştırılır. Bu, yeni bir sürüm oluşturan bir etkinlikten sonra çalıştırılacağı anlamına gelir:

  • Bir uygulama yapısı
  • Bir boru hattı tanıtımı
  • Bir yapılandırma var değişikliği
  • Bir geri alma
  • Platform API'sı üzerinden bir sürüm

Uygulama dynos'ları, serbest bırakma komutu başarıyla tamamlanana kadar yeni bir sürümde başlatılmayacak.

Serbest bırakma komutu sıfır olmayan bir çıkış durumundan çıkarsa veya dyno yöneticisi tarafından kapatılırsa, sürüm iptal edilir ve uygulamanın oluşturulmasına dağıtılmaz.

Bununla birlikte, bu özellik hala beta sürümünde olduğunu unutmayın.

Güncelleştirme:

Modelleri ve içerik türlerini kaldıran geçişleriniz olduğunda, Django konsolda bir onay ister

Aşağıdaki içerik türleri eski ve silinmesi gerekiyor:

...

Bu içerik türleriyle ilgili herhangi bir nesne yabancı bir anahtarla da silinecektir. Bu içerik türlerini silmek istediğinizden emin misiniz? Emin değilseniz, 'hayır' cevabını verin. Devam etmek için 'yes' yazın veya iptal etmek için 'hayır' yazın:

Procfile öğenizdeki geçiş komutu yanıt vermiyor ve bırakma komutu başarısız oluyor. Bu senaryoda, geçiş satırını kaldırın, canlı yayın yapın, geçiş komutunu el ile çalıştırın ve sonra gelecekteki dağıtımlar için tekrar ekleyin.


38
2017-09-03 08:53



Django 1.9'dan beri kullanabilirsiniz manage.py migrate --noinput  docs.djangoproject.com/en/1.10/ref/django-admin/... - Joren
manage.py migrate --noinput Django 1.7+ üzerinde çalışıyor. 1.9'da eklediler --no-inputtakma. - Milorad Pop-Tosic


Göç otomatik olarak Heroku'da çalışır, ancak şu anda dyno'nuzun dağıtılmasından sonra güvenle yapabilirsiniz. heroku run python manage.py migrate.

Üretim yapıyorsanız, uygulamanızı ilk önce heroku maintenance:on


13
2017-08-22 20:46





Bir dosya oluşturabilirsiniz bin/post_compile inşa sonrası bash komutlarını çalıştıracak.
Hala deneysel olarak kabul edildiğini unutmayın.
Daha fazla buildpack bilgisi için buradan okuyun.
Örnek için buraya bakın 

Alternatif olarak, Heroku Yeni Sürümler özelliği üzerinde çalışmakBu süreci basitleştirmek ve çözmek için amaçlamaktadır. (Şu anda Beta).

İyi şanslar!


2
2017-08-16 17:02