2010-09-13 14 views
10

Şu anki Python/Django projemin bir test yüklemesini ayarlama aşamasındayım. Her şey dev sunucumda harika çalışıyor, ancak son zamanlarda test için yeni bir VM ve projenin nihai üretim kopyalarını oluşturduk. Python, Django, SqlAlchemy (MSSQL backend ile) ve WTForms'u ana paketlerim arasında kullanıyorum.QuerySelectField, bir sunucuda çalışır, aynı kodla başka birilerini koparır

Test sunucumun düzgün davranmadığı bir sorun yaşıyorum. Bu paketleri kişisel olarak kurmamış veya yüklememiştim (ki şu anda gitmiş biri tarafından yapılmıştı), bu yüzden bu konuda her şeyi bilmiyorum, ama test sunucumda bunu biliyorum. Dev sunucusunda çok fazla sorun yaşıyorum. Örneğin, Django bunları şablonlarda kullandığımda (geri dönüş değeri yerine '...' yerine 'UserForm.action parametresini döndürür) yöntemlerle düzgün bir şekilde çözümlemiyordu ve şimdi bazı şeyleri bir yere yazıyor gibi görünüyor. Tam olarak bildirilmedikleri zaman tamsayılar. Python, django, wtforms, sqlalchemy sürümleri tüm sunucularda aynıdır. İşte dev sunucuda çalışıyor örnek kod, ama (hata mesajı ile birlikte) test sunucusunda kırar:

forms.py:

class NewPracticeForm(wtforms.Form): 
    Name = wtforms.TextField("Practice Name", [wtforms.validators.Required()]) 
    OrgID = safields.QuerySelectField("Organization", pk_attr='OrgID') 
    action = '/Admin/H/newpractice/' 

pulsedb.py (sqlalch tablo tanım):

#engine created here, can include that if necessary but its just a standard engine=create_engine() using pymssql 
Base = declarative_base() 
metadata = Base.metadata 

class Practice(Base): 
    __tablename__ = 'Practice' 
    Name  = Column(String(256) , nullable=False) 
    OrgID  = Column(String(30) , ForeignKey('dbo.Orglist.OrgID') , nullable=False) 

views.py:

def partNewPractice(request): 
    context = Context() 
    frm = forms.NewPracticeForm() 
    frm.OrgID.query = pwdb.session.query(pwdb.OrglistMap) 
    context['form'] = frm 
    #Return the response here using a method which just tacks a couple things on before returning a normal response 

Ve bu yüzden, ben seçme alanında bir kuruluş seçin, wh ich posts 'OrgID = Z55' (OrgID tablosu bir ID sütunu olarak 3character dizgisi kullandığı için), ancak satır boyunca bir yere bu sorun çıkarır. yapan bir işleyici form puan:

services.py

def HandlerAddPractice(request): 
    prac = pdb.Practice() 
    frm = forms.NewPracticeForm(request.POST, obj=prac) 
    frm.OrgID.query = pwdb.session.query(pwdb.OrglistMap) 

Ve program bir hata atar çünkü, bildiğim kadarıyla o alır gibi değil: bunu bulmuşken

invalid literal for int() with base 10: 'Z55' 

Ayrıca, bir UUID'yi bir nedenle tamsayıya dönüştürmeye çalıştığı QuerySelectField ile benzer bir alanda olur. Kaybettiğim bir yer var mı? Metoduyla uğraştım, ama bu noktada görmezden gelip çalışabileceğim bir şey değil. Teşekkürler! Diğer kod/bilgi istek üzerine mevcuttur. Ayrıca, birçok başka alan var, ama onları kıskançlık çıkarına bıraktım.

+2

Django tam olarak nerede oynuyor? –

+2

Eğer SQLalchemy ve WTForms kullanıyorsanız, Django kullanmaya değer görünmüyor :) – Anentropic

+2

Django'yu kaldırırsanız (bir çok yerde @AndreBossard'ın nerede kullanıldığını göremiyorum) ve hafif bir şey kullandığınızda çok fazla sorunu ortadan kaldırabilirsiniz. WTForms ve SQLAlchemy'ı destekleyen Flask gibi. –

cevap

1

Bu, bir dağıtım sorunu gibi görünüyor. ithalat Virtualenv

Benim yaklaşım kullanarak göreli yolu

  • kullanarak,

    1. sistem çapında, kodunuzu
    2. dağıtma genişletilmiş Django yükleme dizini:

      temelde Django dağıtmak için üç yol vardır Bu seçeneklerden birini seçmek (muhtemelen SqlAlchemy gibi diğer bağımlılıklarınızı nasıl yüklediğinize bağlı olarak 2 veya 3); sonra diğer dağıtımlarla çakışma olup olmadığını kontrol edin.

  • +0

    +1 –

    İlgili konular