Cách thiết lập Mod_WSGI cho Python trên Ubuntu


25

Tôi đang cố gắng thiết lập MOD_WSGI trên hộp Ubuntu của mình. Tôi đã tìm thấy các bước nói rằng tôi cần phải thực hiện các bước sau tôi đã tìm thấy tại http://ubuntuforums.org/showthread.php?t=833766

  1. sudo apt-get cài đặt libapache2-mod-wsgi
  2. sudo a2enmod mod-wsgi
  3. sudo /etc/init.d/apache2 khởi động lại
  4. sudo gedit / etc / apache2 / site-Available / default và cập nhật Danh mục
<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 khởi động lại
  2. Tạo test.wsgi với

    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]
    

Bước 2 thất bại vì nó nói rằng nó không thể tìm thấy mod-wsgi mặc dù apt-get đã tìm thấy nó. Nếu tôi tiếp tục với các bước, ứng dụng python chỉ hiển thị dưới dạng văn bản thuần túy trong trình duyệt.

Bất kỳ ý tưởng những gì tôi đã làm sai?


EDIT: Kết quả cho câu hỏi

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!

EDIT THÊM CHO 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:~$ 

Điều gì không thể tìm thấy mod_wsgi, Apache hoặc Python?
Dana the Sane

1
lệnh a2enmod không thể tìm thấy mod_wsgi
AutomatedTester

Câu trả lời:



5

Xem mô-đun có thực sự được tải đúng cách với:

apache2ctl -t -D DUMP_MODULES

có vẻ như nó đã được tải đúng cách
AutomatedTester

4

Theo như tôi có thể thấy, bạn chưa tải mô-đun mod_wsgi vào httpd.conf.

Trước tiên tôi muốn thử thêm các tệp wsgi vào mods-enabledthư mục của 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

Sau đó khởi động lại Apache và nó sẽ hoạt động.


2

Đầu tiên xác nhận rằng mô-đun WSGI thực sự được cài đặt:

dpkg -l libapache2-mod-wsgi

Điều này sẽ cung cấp cho bạn đầu ra bao gồm tên, phiên bản, v.v. - hãy tìm các chữ cái bên trái của tên, điều này cho biết trạng thái hiện tại của gói. Để kiểm tra thủ công, hãy xem trong / etc / apache2 / mods- Available / và bạn sẽ thấy cả wsgi.confwsgi.load . Nếu chúng tồn tại, chúng sẽ có các liên kết tượng trưng tương ứng trong / etc / apache2 / mods-enable / .

Nếu thiết lập không tồn tại, hãy bắt đầu bằng cách sửa lỗi đó trước - bạn không thể diễn giải mã python qua apache nếu apache không thể tìm thấy trình thông dịch. Ngoài ra, tập lệnh test.txt của bạn sẽ không hoạt động được cung cấp cho các lệnh AddHandler mà bạn đã định cấu hình - lệnh đó cho apache chuyển các tệp của một tiện ích mở rộng nhất định cho trình xử lý có liên quan. Tạo tập lệnh test.wsgi hoặc thay đổi lệnh AddHandler .


test.txt là một lỗi đánh máy trong câu hỏi. Tôi có nghĩa là để đặt test.wsgi.
AutomatedTester

Tốt, nhưng bạn đã xác nhận rằng mô-đun được cài đặt và liên kết chính xác theo các hướng dẫn ở trên chưa?
Zayne S Halsall

Tôi đã đặt thông tin mà bạn yêu cầu trong câu hỏi.
AutomatedTester

Không phải tất cả thông tin - vui lòng kiểm tra thủ công nếu các tệp wsgi.confwsgi.load trong / etc / apache2 / mods- Available / được liên kết một cách tượng trưng với / etc / apache2 / mods được kích hoạt theo yêu cầu. Một danh sách dài đơn giản của thư mục sẽ đủ (tức là ls -alh / etc / apache2 / mods-enable / ).
Zayne S Halsall

1

Bạn đã thêm dòng LoadModule để thực sự khiến mod_wsgi được tải chưa? Thông báo lỗi thực tế là gì và nó đến từ đâu? Xem:

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

cho hướng dẫn cấp thấp. Vì bạn đang sử dụng các gói nhị phân, bạn có thể bỏ qua quá trình biên dịch, nhưng bạn vẫn cần phải tải mod_wsgi. Trường hợp / cách bạn có thể làm điều này sẽ được xác định ở mức độ theo phân phối Linux của bạn. Dựa trên hướng dẫn đó, bạn có nghĩa là đã chạy:

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

Bạn đã thực sự làm điều đó?


CHỈNH SỬA

Đọc câu hỏi của bạn một lần nữa nó là hiển nhiên. Bạn nói rằng các tệp có phần mở rộng .wsgi được xử lý bởi mod_wsgi nhưng sau đó bạn đã cho tệp một phần mở rộng .py. Sử dụng .wsgi thay thế.


test.txt là một lỗi đánh máy trong câu hỏi. Tôi có nghĩa là để đặt test.wsgi. Tôi đã chạy a2enmod nhưng nó nói rằng nó không thể tìm thấy mod_wsgi khi tôi đặt câu hỏi cuối
AutomatedTester

1

Bạn có thể nhìn vào cú pháp của con trăn của bạn đầu tiên. Kiểm tra xem bạn có thực sự có 4 khoảng trắng sau định nghĩa hàm không. Kiểm tra tệp python bằng cách chạy nó trước qua thiết bị đầu cuối

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

sau đó nếu không có lỗi xuất hiện, hãy chạy nó qua trình duyệt web.

http: // localhost / wsgi /

và nhân tiện, bạn dường như đã bỏ lỡ điều gì đó cho tệp cấu hình apache / virtualhost của bạn. Đặt cái này vào trong thẻ

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

Nhân tiện, apt không có vấn đề gì khi cài đặt mô-đun wsgi. Tôi đã thử nghiệm nó ngay bây giờ và đã chạy thành công một kịch bản python trên trình duyệt web của tôi.


0

Không chắc chắn nếu điều này có liên quan, nhưng sau khi chạy:

apt-get install libapache2-mod-wsgi

... các tệp sau không tồn tại:

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

Cài đặt lại dường như không thay thế các tập tin bị thiếu. Kỳ dị! Tuy nhiên, purgedường như làm để lừa:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.