2016-04-10 26 views
3

Django tabanlı uygulamalarla çalışmaktan ve bir django projesini, django dokümanlar üzerinde verilen varsayılana neredeyse benzer olan aşağıdaki yapılandırmaları kullanarak dağıtmaya çalışmak için yeni biriyim.Django dağıtımı: apache/mod_wsgi tarafından kullanılacak doğru python yapılandırılması

apache2.conf

# WSGI Configuration 
WSGIDaemonProcess demo python-path=/home/inian/Documents/demo 
WSGIProcessGroup demo 

WSGIScriptAlias//home/inian/Documents/demo/demo/wsgi.py process-group=demo 

<Directory /home/inian/Documents/demo/demo> 
<Files wsgi.py> 
    Require all granted 
</Files> 
</Directory> 

# Serving static files 
Alias /static/ /home/inian/Documents/demo/static/ 

<Directory /home/inian/Documents/demo/static> 
    Require all granted 
</Directory> 

ben apache sunucusunu başlattığınızda, normalde başlar fakat feryat olarak gösterilen piton sürümü uyuşmazlığı projemi yüklenmesi için çalışma zamanı hatası veriyor.

/var/log/apache2/error.log

[Sun Apr 10 20:38:16.165536 2016] [wsgi:warn] [pid 22959] mod_wsgi: Compiled for Python/2.7.11. 
[Sun Apr 10 20:38:16.165551 2016] [wsgi:warn] [pid 22959] mod_wsgi: Runtime using Python/2.7.10. 
[Sun Apr 10 20:38:16.166787 2016] [mpm_prefork:notice] [pid 22959] AH00163: Apache/2.4.7 (Ubuntu) OpenSSL/1.0.1f mod_wsgi/4.5.1 Python/2.7.10 configured -- resuming normal operations 

benim uygulama sürümü 2.7.11 olduğu konumda /usr/local yüklü python kullanmak istiyorum ve bu derlemek ve yüklemek için kullanılan biridir mod_wsgi, ancak sadece güvende olmak için 'u da kontrol ettim, bu da çıktıyı Python 2.7.6 olarak veriyor. Bu iki konuya kullanımını getiriyor:

  1. nasıl (sunucuda her şey için varsayılan olarak kullanıyoruz) yükleme konumuna /usr/local/bin/python gelen Python 2.7.11 kullanmak için apache işaret edebilir.

  2. Hiç yükleme veya 2.7.10 ile herhangi bir şey yapmak hatırlamıyorum, bu yüzden nasıl ve nereden apache tarafından yüklenip kullanıldığını bilmiyorum. Birisi bana bu konuda rehberlik edebilirse, o zaman da harika olacak.

+0

Bunlar sadece uyarılar, ve iki sürüm çok yakın olarak, onları göz ardı edebilirler. – Zorgmorduk

+0

Uh hayır bunlar sadece uyarı değil, bunlar daha sonraki çalışma zamanı hatalarının sebebidir. 2.7.10 sürümünün nereden geldiğini bilmediğim için, bu sürüm 2.7.11 yüklememde dikkat ettiğim 'pyUnicodeUCS4_AsEncodedString' düzgün bir şekilde derlenmedi. Yani evet, '/ usr/local' konumunda – bawejakunal

+0

konumuna kurduğum doğru python sürümünü kullanmam gerekiyor: [wsgi: warn]. Yani gerçekten onunla yaşayabilirsin. Tabii ki, bu iki sürümde farklı olan bir şey kullanırsanız, bir sorun yaşayabileceğiniz konusunda uyarıda bulunmanız gerekir. Şans düşük. – Zorgmorduk

cevap

1

Mod_wsgi'nin belirli bir Python yüklemesine karşı derlendiği ve daha sonra Python yüklemesinin yükseltildiği durumda bir uyarı iletisidir. Paylaşılan kütüphaneler nasıl çalıştığı için normalde önemli olmamalıdır. Sorun mod_wsgi Zamanında için Python paylaşılan kütüphane buluyor Python kurulumu karşı derlenmiş olmamasıdır olsa durumda

: Bu belgelenmiştir. Bu, iki Python yüklemesinin Unicode karakterlerinin genişliği için olanlar gibi uyumlu derleyici bayrak kümeleriyle kurulmadığı çeşitli sorunlara neden olabilir.

Temel olarak, mod_wsgi'yi/usr/local içindeki bir Python yüklemesine karşı kaynak koddan derlemiş olmanız gibi sorun görünüyor, ancak bu senaryo için doğru yapılmadığı için, çalışma zamanında Python'u buluyor/usr içine yüklenen sürümün paylaşımlı kütüphanesi. Python Linux sistemlerinde şekilde kurulmalı nasıl büyük bir tartışma için

okumak gitmek:

Ardından, kaynağından mod_wsgi derleme zaman, sen LD_RUN_PATH ortamını ayarlamak sağlamak Değişken Python yüklemeniz için Python paylaşımlı kütüphanesinin kurulu olduğu kütüphane dizinini içerecek değişken. Bu ortam değişkeni mod_wsgi'nin çalışma zamanında doğru kütüphaneyi bulmasına izin verir ve/usr/lib içindeki sürümü kullanmaz.sen mod_wsgi kurduktan sonra,

Son olarak ve doğru paylaşılan kütüphane bulma:

Bu aracı şu belgelerde yönergeleri izleyerek doğru olana/yanlış bulmaktır doğrulayabilir Ayrıca Apache konfigürasyonunda WSGIPythonHome yönergesini de ayarlayabilir, böylece çalışma zamanı dosyaları için doğru Python kurulumunu bulur. Bu, en belgelerinde açıklanmıştır:

+0

Python 2.7.11'in benim için kullanılmasının nedeninin, unicode 4 desteği ile derlediğim ve mod_wsgi'yi derlemek için kullandığım bu yüzden, hata günlüğünün 'mod_wsgi' satırını doğru olarak gösterdiğinden bahsetmiştim: Python için derlenmiş/2.7.1'. Yani mod_wsgi'nin derlenmesi ve kurulması noktasına kadar her şey mükemmel, önerdiğiniz gibi. Beni ne şaşırtır? Python 2.7.10 çünkü '/ usr/local/bin/python' UCS4 bayrağı ile 2.7.11 ve '/ usr/bin/python' UCS2 ile 2.7.6'dır. Bu soruda zaten bundan bahsetmiştim. – bawejakunal

+0

Ayrıca, [blog'unuzda (http://blog.dscpl.com.au/2014/09/using-python-virtual-environments-with.html) sizin tarafınızdan önerildiği gibi "WGIPythonHome" kullanmayı denedim, ancak bu yok ' WSGIDaemonProcess ile çalışıyor gibi görünüyor. Hatta önerildiği gibi "WSGIDaemonProcess" içinde python-home =/usr/local 'yazmayı denedim, ancak bu bile çalışmıyor, çünkü mod_wsgi 4.5.1'in son sürümü bunu sonlandırdı. Ana korkutucu nokta, python 2.7.10 versiyonudur, ilk etapta orada olmamalı, nereden geldiği hakkında hiçbir fikrim yok. 2.7.6 veya 2.7.11 olmalıydı: | – bawejakunal

+0

'ldd/usr/lib/apache2/modules/mod_wsgi.so'/usr/local/lib/libpython2.7.so.1.0' verir – bawejakunal