Cara mengatur Mod_WSGI untuk Python di Ubuntu

25

Saya mencoba mengatur MOD_WSGI di kotak Ubuntu saya. Saya telah menemukan langkah-langkah yang mengatakan bahwa saya perlu melakukan langkah-langkah berikut yang saya temukan di http://ubuntuforums.org/showthread.php?t=833766

  1. sudo apt-get install libapache2-mod-wsgi
  2. sudo a2enmod mod-wsgi
  3. sudo /etc/init.d/apache2 restart
  4. sudo gedit / etc / apache2 / sites-available / default dan perbarui Direktori
<Directory /var/www/>
  Options Indexes FollowSymLinks MultiViews ExecCGI

  AddHandler cgi-script .cgi
  AddHandler wsgi-script .wsgi

  AllowOverride None
  Order allow,deny
  allow from all
</Directory>
  1. sudo /etc/init.d/apache2 restart
  2. Dibuat test.wsgi dengan

    def application(environ, start_response):
        status = '200 OK' 
        output = 'Hello World!'    
        response_headers = [('Content-type', 'text/plain'),
                            ('Content-Length', str(len(output)))]
        start_response(status, response_headers)
    
        return [output]
    

Langkah 2 gagal karena dikatakan tidak dapat menemukan mod-wsgi meskipun apt-get menemukannya. Jika saya melanjutkan langkah-langkah aplikasi python hanya menunjukkan sebagai teks biasa di browser.

Adakah yang salah saya lakukan?


EDIT: Hasil untuk pertanyaan yang diajukan

automatedtester@ubuntu:~$ dpkg -l libapache2-mod-wsgi
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Cfg-files/Unpacked/Failed-cfg/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                   Version                                Description
+++-======================================-======================================-============================================================================================
ii  libapache2-mod-wsgi                    2.5-1                                  Python WSGI adapter module for Apache
automatedtester@ubuntu:~$ dpkg -s libapache2-mod-wsgi
Package: libapache2-mod-wsgi
Status: install ok installed
Priority: optional
Section: python
Installed-Size: 376
Maintainer: Ubuntu MOTU Developers <[email protected]>
Architecture: i386
Source: mod-wsgi
Version: 2.5-1
Depends: apache2, apache2.2-common, libc6 (>= 2.4), libpython2.6 (>= 2.6), python (>= 2.5), python (<< 2.7)
Suggests: apache2-mpm-worker | apache2-mpm-event
Conffiles:
 /etc/apache2/mods-available/wsgi.load 06d2b4d2c95b28720f324bd650b7cbd6
 /etc/apache2/mods-available/wsgi.conf 408487581dfe024e8475d2fbf993a15c
Description: Python WSGI adapter module for Apache
 The mod_wsgi adapter is an Apache module that provides a WSGI (Web Server
 Gateway Interface, a standard interface between web server software and
 web applications written in Python) compliant interface for hosting Python
 based web applications within Apache. The adapter provides significantly
 better performance than using existing WSGI adapters for mod_python or CGI.
Original-Maintainer: Debian Python Modules Team <[email protected]>
Homepage: http://www.modwsgi.org/
automatedtester@ubuntu:~$ sudo a2enmod libapache2-mod-wsgi
ERROR: Module libapache2-mod-wsgi does not exist!
automatedtester@ubuntu:~$ sudo a2enmod mod-wsgi
ERROR: Module mod-wsgi does not exist!

EDIT LEBIH LANJUT UNTUK RMYATE

automatedtester@ubuntu:~$ apache2ctl -t -D DUMP_MODULES
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_worker_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgid_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 python_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK
automatedtester@ubuntu:~$ 
AutomaticTester
sumber
Apa yang tidak dapat menemukan mod_wsgi, Apache atau Python?
Dana the Sane
1
perintah a2enmod tidak dapat menemukan mod_wsgi
AutomatedTester

Jawaban:

6

Saya telah menemukan bahwa ini adalah bug yang dikenal dengan paket apt-get mod_wsgi yang berumur lebih dari setahun! Detail di http://www.mail-archive.com/[email protected]/msg1147225.html . Paket apt-get tidak memiliki file wsgi.load sehingga perlu dibuat dengan melakukan langkah-langkah di tautan di atas.

Terima kasih untuk semua yang telah membantu!

AutomaticTester
sumber
5

Lihat apakah modul tersebut benar-benar dimuat dengan:

apache2ctl -t -D DUMP_MODULES
rmyates
sumber
tidak tampak seperti itu telah dimuat dengan benar
AutomatedTester
4

Sejauh yang saya bisa lihat, Anda belum memuat modul mod_wsgi ke dalam httpd.conf.

Saya pertama kali mencoba menambahkan file wsgi ke mods-enableddirektori Apache.

sudo ln -s /etc/apache2/mods-available/wsgi.load /etc/apache2/mods-enabled
sudo ln -s /etc/apache2/mods-available/wsgi.conf /etc/apache2/mods-enabled

Kemudian restart Apache dan itu akan berfungsi.

Dan Loewenherz
sumber
2

Pertama konfirmasikan bahwa modul WSGI sebenarnya diinstal:

dpkg -l libapache2-mod-wsgi

Ini akan memberi Anda keluaran termasuk nama, versi, dll. - cari huruf di sebelah kiri nama, ini menunjukkan status paket saat ini. Untuk memeriksanya secara manual, lihat di / etc / apache2 / mods-available / dan Anda harus melihat wsgi.conf dan wsgi.load . Jika ini ada, mereka harus memiliki symlink yang sesuai di / etc / apache2 / mods enabled / .

Jika salah satu set tidak ada, mulailah dengan memperbaikinya terlebih dahulu - Anda tidak dapat menafsirkan kode python melalui apache jika apache tidak dapat menemukan penerjemah. Selain itu, skrip test.py Anda tidak akan berfungsi karena arahan AddHandler yang telah Anda konfigurasi - arahan itu memberi tahu apache untuk meneruskan file dari ekstensi tertentu ke penangan yang relevan. Buat skrip test.wsgi Anda atau ubah direktif AddHandler .

Zayne S Halsall
sumber
test.py adalah salah ketik dalam pertanyaan. Saya bermaksud melakukan test.wsgi.
AutomatedTester
Baik, tetapi sudahkah Anda mengonfirmasi bahwa modul terpasang dan ditautkan dengan benar sesuai instruksi di atas?
Zayne S Halsall
Saya telah memasukkan informasi yang Anda minta dalam pertanyaan.
AutomatedTester
Tidak semua informasi - silakan periksa secara manual apakah file wsgi.conf dan wsgi.load di / etc / apache2 / mods-available / terkait secara simbolis ke / etc / apache2 / mods-enabled seperti yang diminta. Daftar panjang sederhana dari direktori harus mencukupi (yaitu ls -alh / etc / apache2 / mods-enabled / ).
Zayne S Halsall
1

Apakah Anda menambahkan baris LoadModule untuk benar-benar menyebabkan mod_wsgi dimuat? Apa pesan kesalahan aktual dan dari mana asalnya? Lihat:

http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide

untuk instruksi level rendah. Karena Anda menggunakan paket biner, Anda dapat melewati kompilasi, tetapi Anda masih harus membuat mod_wsgi dimuat. Di mana / bagaimana Anda dapat melakukan ini akan ditentukan pada tingkat tertentu oleh distribusi Linux Anda. Berdasarkan panduan itu Anda seharusnya menjalankan:

sudo a2enmod mod-wsgi
sudo /etc/init.d/apache2 restart

Apakah kamu benar-benar melakukan itu?


EDIT

Membaca pertanyaan Anda lagi sudah jelas. Anda mengatakan bahwa file dengan ekstensi .wsgi ditangani oleh mod_wsgi tetapi kemudian Anda memberi file tersebut ekstensi .py. Gunakan .wsgi sebagai gantinya.

Graham Dumpleton
sumber
test.py adalah salah ketik dalam pertanyaan. Saya bermaksud melakukan test.wsgi. Saya menjalankan A2enmod tetapi mengatakan bahwa hal itu tidak bisa menemukan mod_wsgi seperti yang saya menempatkan pada akhir pertanyaan saya
AutomatedTester
1

Anda dapat melihat sintaks python Anda terlebih dahulu. Periksa apakah Anda benar-benar memiliki 4 spasi setelah definisi fungsi. Periksa file python dengan menjalankannya terlebih dahulu melalui terminal

$ python /var/www/py/wsgi_handler.wsgi

maka jika tidak ada kesalahan muncul, jalankan melalui browser web.

http: // localhost / wsgi /

dan omong-omong, Anda sepertinya melewatkan sesuatu untuk konfigurasi apache / file virtualhost Anda. Letakkan ini di dalam tag

WSGIScriptAlias /wsgi /var/www/py/wsgi_handler.py

Omong-omong, apt tidak memiliki masalah saat memasang modul wsgi. Saya telah mengujinya sekarang dan telah berhasil menjalankan skrip python di browser web saya.

YeahBoi
sumber
0

Tidak yakin apakah ini relevan, tetapi setelah dijalankan:

apt-get install libapache2-mod-wsgi

... file-file berikut ini tidak ada:

/etc/apache2/mods-available/wsgi.conf
/etc/apache2/mods-available/wsgi.load

Menginstal ulang sepertinya tidak menggantikan file yang hilang. Aneh! Namun, purgesepertinya dilakukan trik:

apt-get install libapache2-mod-wsgi
apt-get purge libapache2-mod-wsgi
apt-get install libapache2-mod-wsgi

# ls /etc/apache2/mods-available/ | grep wsgi
wsgi.conf
wsgi.load
Nick Bolton
sumber