วิธีการตั้งค่า Mod_WSGI สำหรับ Python บน Ubuntu


25

ฉันกำลังพยายามติดตั้ง MOD_WSGI ในกล่อง Ubuntu ของฉัน ฉันพบขั้นตอนต่าง ๆ ที่กล่าวว่าฉันต้องทำตามขั้นตอนต่อไปนี้ที่พบใน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 รีสตาร์ท
  4. sudo gedit / etc / apache2 / sites-available / default และอัปเดตไดเรกทอรี
<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 รีสตาร์ท
  2. สร้าง test.wsgi ด้วย

    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]
    

ขั้นตอนที่ 2 ล้มเหลวเนื่องจากมีข้อความระบุว่าไม่สามารถหา mod-wsgi ได้แม้ว่าจะพบ apt-get ถ้าฉันทำตามขั้นตอนแอพไพ ธ อนจะแสดงเป็นข้อความธรรมดาในเบราว์เซอร์

ความคิดใดที่ฉันทำผิดไป?


แก้ไข: ผลลัพธ์สำหรับคำถามที่ถาม

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 <ubuntu-motu@lists.ubuntu.com>
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 <python-modules-team@lists.alioth.debian.org>
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!

แก้ไขเพิ่มเติมสำหรับ RMYates

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:~$ 

สิ่งที่หา mod_wsgi, Apache หรือ Python ไม่ได้?
Dana the Sane

1
คำสั่ง a2enmod ไม่พบ mod_wsgi
AutomatedTester

คำตอบ:


6

ฉันได้พบว่านี่เป็นข้อผิดพลาดที่รู้จักกับแพ็คเกจ mod_wsgi apt-get ที่มีอายุเกินหนึ่งปี! รายละเอียดที่http://www.mail-archive.com/ubuntu-bugs@lists.ubuntu.com/msg1147225.html แพ็กเกจ apt-get ไม่มีไฟล์ wsgi.load ดังนั้นจำเป็นต้องสร้างขึ้นโดยทำตามขั้นตอนในลิงก์ด้านบน

ขอบคุณทุกคนที่ช่วย!



4

เท่าที่ผมสามารถมองเห็นคุณยังไม่ได้โหลดโมดูล mod_wsgi httpd.confลงของคุณ

ฉันจะลองเพิ่มไฟล์ wsgi ไปยังmods-enabledไดเรกทอรีของ 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

จากนั้นรีสตาร์ท Apache และควรใช้งานได้


2

ก่อนอื่นให้ยืนยันว่าติดตั้งโมดูล WSGI จริง :

dpkg -l libapache2-mod-wsgi

สิ่งนี้จะให้ผลลัพธ์กับคุณรวมถึงชื่อรุ่น ฯลฯ - มองหาตัวอักษรทางด้านซ้ายของชื่อซึ่งบ่งบอกถึงสถานะปัจจุบันของแพ็คเกจ ในการตรวจสอบด้วยตนเองมองใน/ etc / apache2 / mods ใช้ได้ /และคุณจะเห็นทั้งwsgi.confและwsgi.load ถ้ามีอยู่เหล่านี้พวกเขาควรจะมี symlinks ที่สอดคล้องกันใน/ etc / apache2 / วัยรุ่นที่เปิดใช้งาน /

หากไม่มีการตั้งค่าให้เริ่มด้วยการแก้ไขก่อน - คุณไม่สามารถแปลรหัสไพ ธ อนผ่านทาง apache หาก apache ไม่พบล่าม นอกจากนี้สคริปต์test.pyของคุณจะไม่ทำงานเนื่องจากคำสั่งของAddHandler ที่คุณกำหนดไว้ - คำสั่งนั้นบอกให้ apache ส่งไฟล์ของส่วนขยายที่แน่นอนไปยังตัวจัดการที่เกี่ยวข้อง ทำให้สคริปต์ของคุณtest.wsgiหรือเปลี่ยนคำสั่งAddHandler


test.py เป็นคำถามที่พิมพ์ผิด ฉันตั้งใจจะใส่ test.wsgi
AutomatedTester

ไม่เป็นไร แต่คุณได้ยืนยันแล้วว่ามีการติดตั้งโมดูลและเชื่อมโยงอย่างถูกต้องตามคำแนะนำข้างต้นหรือไม่
Zayne S Halsall

ฉันได้ใส่ข้อมูลที่คุณถามในคำถาม
AutomatedTester

ไม่ใช่ข้อมูลทั้งหมด - โปรดตรวจสอบด้วยตนเองหากไฟล์wsgi.confและwsgi.loadใน/ etc / apache2 / mods-available /เชื่อมโยงด้วยสัญลักษณ์/ etc / apache2 / mods-enabledตามที่ร้องขอ รายการแบบยาวอย่างง่ายของไดเร็กทอรี่ควรเพียงพอ (เช่นls -alh / etc / apache2 / mods-enabled / )
Zayne S Halsall

1

คุณเพิ่มบรรทัด LoadModule เพื่อทำให้ mod_wsgi โหลดจริงหรือไม่ ข้อความแสดงข้อผิดพลาดจริงคืออะไรและมาจากที่ใด ดู:

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

สำหรับคำแนะนำในระดับต่ำ เนื่องจากคุณใช้แพ็คเกจไบนารีคุณสามารถข้ามการคอมไพล์ แต่คุณยังต้องทำให้ mod_wsgi ถูกโหลด ที่ไหน / วิธีที่คุณสามารถทำเช่นนี้จะถูกกำหนดในระดับโดยการกระจาย Linux ของคุณ จากคำแนะนำที่คุณตั้งใจจะให้เรียกใช้:

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

คุณทำอย่างนั้นจริงหรือ


แก้ไข

อ่านคำถามของคุณอีกครั้งมันชัดเจน คุณบอกว่าไฟล์ที่มีนามสกุล. wsgi ได้รับการจัดการโดย mod_wsgi แต่จากนั้นคุณให้ไฟล์เป็นนามสกุล. py ใช้. wsgi แทน


test.py เป็นคำถามที่พิมพ์ผิด ฉันตั้งใจจะใส่ test.wsgi ฉันเรียกใช้ a2enmod แต่มันบอกว่าไม่สามารถหา mod_wsgi ได้ในตอนท้ายของคำถาม
AutomatedTester

1

คุณอาจดูที่ไพ ธ อนของไพ ธ อนก่อน ตรวจสอบว่าคุณมี 4 ช่องว่างจริง ๆ หลังจากนิยามฟังก์ชันหรือไม่ ตรวจสอบไฟล์ไพ ธ อนด้วยการรันก่อนผ่านเทอร์มินัล

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

จากนั้นหากไม่มีข้อผิดพลาดปรากฏขึ้นให้เรียกใช้ผ่านเว็บเบราว์เซอร์

http: // localhost / WSGI /

และโดยวิธีการที่คุณดูเหมือนจะพลาดอะไรบางอย่างสำหรับไฟล์ apache configuration / virtualhost ของคุณ วางสิ่งนี้ไว้ในแท็ก

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

apt ไม่มีปัญหาเมื่อทำการติดตั้งโมดูล wsgi ฉันได้ทำการทดสอบแล้วและประสบความสำเร็จในการรันสคริปต์ python บนเว็บเบราว์เซอร์ของฉัน


0

ไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องหรือไม่หลังจากทำงาน:

apt-get install libapache2-mod-wsgi

... ไฟล์ต่อไปนี้ไม่มีอยู่:

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

ดูเหมือนว่าการติดตั้งใหม่จะไม่แทนที่ไฟล์ที่หายไป แปลก! อย่างไรก็ตามpurgeดูเหมือนจะทำเพื่อหลอกลวง:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.