2016-03-31 23 views
1

Değiştirilmiş inspectdb'den sonra, web'deki dizin sayfası yüklendiğinde onu çalıştırmak istiyorum. Yani, benim view.py içinde - def endeksi, Özür sonraki yapmaya çalışıyor: çalışmıyor YaniSunucuda dosyaları geçersiz kılmak için harici komut (Django) nasıl çalıştırılır?

def index(request): 
subprocess.Popen("rm /path/app/models.py", shell=True) 
subprocess.Popen("python2.7 /path/manage.py inspectdb_New > /path/app/models.py", shell=True) 
return render_to_response('index/index.html', context_instance = RequestContext(request)) 

. Os.system, subprocess.call ile de denedim, ama hala çalışmıyor. Benim için en azından, yürütme zamanında models.py değiştiremiyorum gibi görünüyor ama sorun ne olabilir bilmiyorum ...

Herhangi bir fikir çocuklar?

Teşekkürler.

cevap

1

Modeller (ve diğer python kodu) yalnızca sunucu başlangıcında yüklendiğinden, web sunucusu çalışırken models.py dosyanızı değiştiremezsiniz.

+0

Gerçekten emin değilim. Bence sunucu her kısa sürede modele danışıyor. Şimdi çalışıyorum: subprocess.Popen ("python2.7 /path/manage.py inspectdb> /path/app/models1.py", shell = True) alt işlem.Popen ("mv/yol/models1. py /path/models.py ", shell = True) Ve bu bazen çalışıyor. Sunucu modelleri danışmanlık yaparken ve harici komut aynı anda üzerine yazılırsa, web çöküyor ve modeller bitiyor, ama başka zamanlarda çalışıyor (yeniden tahmin etme, sunucunun danışmanlığıyla uyuşmadığı zaman ...) –

+1

Hayır Modeller sadece başlangıçta yüklenir. Belki de neyi başarmak istediğini açıklıyorsun. Muhtemelen daha iyi/daha kolay bir çözüm var. – ilse2005

+0

Birisi ddbb'yi değiştirdiğinde (tabloları silme, ekleme, değiştirme, ...) her zaman modelleri güncellemek istiyorum ve bu değişiklikler web'de yansıtılacaktır (web her zaman başlatılır) –

1

Sorunun 2 bölümü vardır: a) görünüm işlevi çağrıldığında kabuğun bir şey yapmasını istiyorsunuz. Zaten alarm bipiyorum. b) Yeni model yüklemek istersiniz. Bu olmayacak. Yüklenen yeni kodun yeniden yüklenmesi gerekir (modelden uyarılma, vb.). Muhtemelen runserver komutunu kullanırsanız, Django autoreloader koduna bakın: https://github.com/django/django/blob/master/django/utils/autoreload.py

Gen_filenames() tarafından listelenen dosyaları izler ve bir şey değiştiğinde yeniden yükle. Model listelenmemişti, böylece koddaki değişiklik yansıtılmayacak.

Yeniden yüklemeyi zorlamak için bir şeye dokunabilirim veya .pyc dosyalarını kaldırırım.

+0

Otomatik yükleyiciyi kontrol ediyorum, ihtiyacım olan şey değil. Özel bir Django yönetici yaptım, bu yüzden ihtiyacım olan özel kod ile models.py ve admin.py oluşturmak için inspectdb'yi geçersiz kıldım. Ayrıca, birisi ddbb şemasında (MySQL tarafından) değişiklikler yaptığında, yeni models.py ve admin.py dinamik olarak oluşturmak istiyorum ve bu değişiklikler sunucuyu durdurmadan web'de yansıtılmalıdır (tüm zamanların başlatılması gerekir). Son olarak desist, sunucuyu durduracağım, yeni inspectdb başlatacağım ve web üzerinde yansıyan değişiklikleri almak için sunucuyu yeniden başlatıyorum ... Neyse, yardımlarınız için teşekkürler. Şerefe arkadaşlar. –

İlgili konular