簡體   English   中英

Python Flask兩個站點和使用Paramiko庫錯誤的虛擬環境

[英]Python Flask two sites and Virtual Environment using Paramiko Library Error

我開發了一個Python Flask應用程序,希望在運行另一個Flask應用程序的服務器(RHEL 6)中運行。 我正在使用httpd(apache)和mod_wsgi來實現這一點。 第一個應用程序運行良好,沒有任何問題。

我在/ var / www / app2上安裝了我的應用程序,目錄結構為:

app2
  |_ app2
  |   |_ config.ini
  |   |_ __init__.py
  |   |_ static
  |   |_ templates
  |   |_ venv
  |_ app2.wsgi

/ var / www / app2上的所有文件和目錄的權限均為755,並且我正在使用虛擬環境通過pip paramiko和flask安裝,擁有所有這些文件和目錄的用戶稱為“ user1”

app2.wsgi的內容是:

import sys
import logging

activate_this = '/var/www/app2/app2/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/app2/")

from app2 import app as application

apache服務器上的虛擬主機配置為:

NameVirtualHost *:80
<VirtualHost *:80>
                ServerName server1
                ServerAdmin webmaster@example.org
                WSGIDaemonProcess app1 user=user1 group=user1 threads=5
                WSGIScriptAlias /app1 /var/www/app1/app1.wsgi
                <Directory /var/www/app1/app1/>
                                Order allow,deny
                                Allow from all
                </Directory>
                Alias /app1/static /var/www/app1/app1/static
                <Directory /var/www/app1/app1/static/>
                                Order allow,deny
                                Allow from all
                </Directory>

                WSGIDaemonProcess app2 user=sat_user group=sat_user threads=5
                WSGIScriptAlias /app2 /var/www/app2/app2.wsgi
                <Directory /var/www/app2/app2/>
                                Order allow,deny
                                Allow from all
                </Directory>
                Alias /app2/static /var/www/app2/app2/static
                <Directory /var/www/app2/app2/static/>
                                Order allow,deny
                                Allow from all
                </Directory>

                ErrorLog /var/log/httpd/error.log
                LogLevel warn
                CustomLog /var/log/httpd/access.log combined
</VirtualHost>

我重新啟動了服務器上的httpd服務,當我嘗試使用http:// server1 / app2連接到新應用程序時,通過查看apache的error.log出現了內部服務器錯誤,我看到以下內容:

mod_wsgi (pid=8205): Target WSGI script '/var/www/app2/app2.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=8205): Exception occurred processing WSGI script '/var/www/app2/app2.wsgi'.
Traceback (most recent call last):
  File "/var/www/app2/app2.wsgi", line 10, in <module>
    from app2 import app as application
  File "/var/www/app2/app2/__init__.py", line 2, in <module>
    import paramiko
  File "/var/www/app2/app2/venv/lib/python2.6/site-packages/paramiko/__init__.py", line 30, in <module>
    from paramiko.transport import SecurityOptions, Transport
  File "/var/www/app2/app2/venv/lib/python2.6/site-packages/paramiko/transport.py", line 33, in <module>
    from cryptography.hazmat.backends import default_backend
  File "/var/www/app2/app2/venv/lib/python2.6/site-packages/cryptography/hazmat/backends/__init__.py", line 7, in <module>
    import pkg_resources
  File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 3019, in <module>
    @_call_aside
  File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 3003, in _call_aside
    f(*args, **kwargs)
  File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 3032, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 646, in _build_master
    ws = cls()
  File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 639, in __init__
    self.add_entry(entry)
  File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 695, in add_entry
    for dist in find_distributions(entry, True):
  File "/var/www/app2/app2/venv/lib/python2.6/site-packages/pkg_resources/__init__.py", line 2012, in find_on_path
    if len(os.listdir(fullpath)) == 0:
OSError: [Errno 13] Permission denied: '/usr/lib64/python2.6/site-packages/tornado-4.4.1.dist-info'

同樣,第一個應用程序沒有任何問題,如果我使用用戶“ user1”登錄並連接到虛擬環境並使用python __init__.py運行該應用程序,則可以在端口5000上毫無問題地進行連接。

看來paramiko嘗試訪問虛擬環境之外的某些庫,導致錯誤,我不知道為什么,我嘗試禁用SELinux,結果仍然相同。

任何幫助將不勝感激!

謝謝

當您使用WSGIDaemonProcess指令以使WSGI應用程序以守護程序模式運行時,您仍然需要標記要在該守護進程組中運行的WSGI應用程序。 您無需執行此操作,因此WSGI應用程序仍以Apache用戶身份以嵌入式模式(Apache worker進程)運行。

你需要為使用WSGIProcessGroup在適當的范圍內,或process-group選項WSGIScriptAlias委托一個WSGI應用程序的守護進程組。

有關這些指令的信息,請參見:

另請參閱有關使用mod_wsgi設置Python虛擬環境的最佳方法的文檔。 您沒有使用推薦的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM