2016-09-09 1 views
1

파이썬 명령 줄을 직접 사용하면 잘 동작하는 Flask-Web-App을 개발했습니다. 그러나 mod-wsgi로 Apache2에 배포하면 내부 모듈을 가져올 수 없습니다. 관련 게시물을 모두 읽었지만 아직 문제를 파악할 수 없습니다. 먼저 아래에서 모두 시도했습니다.내 Apache WSGI Flask web-app가 내부 파이썬 모듈을 가져올 수 없습니다.

1 - 응용 프로그램 폴더 아래의 모든 파일과 하위 폴더가 www-data ("Apache2 서비스 계정")에 대해 rwx 권한을 가지고 있는지 확인했습니다.

2 - WSGIPythonPath/var/www/FlaskApp/FlaskApp/Base/:/var/www/FlaskApp/FlaskApp/Base/Form/:/var/www/FlaskApp/FlaskApp/Base/Model/(아래 참조)

3 - wsgi 스크립트의 sys.path 변수에 대한 모듈 경로를 추가했습니다.

# internal imports 
import Base.Model as Model 
from Base import Constant as cnst 
from Base.Form import UserRegistrationForm, ProductForm 
. 
. 
. 

if __name__ == "__main__": 
    app.run() 

난 그냥 내가 가능성이 놓친 것 다른 어떤 다른 생각을 가지고하지 않습니다

#!/usr/bin/python 
import sys 
import logging 
logging.basicConfig(stream=sys.stderr) 
sys.path.insert(0,"/var/www/FlaskApp/") 
sys.path.append('/var/www/FlaskApp/FlaskApp/Base/') 
sys.path.append('/var/www/FlaskApp/FlaskApp/Base/Form/') 
sys.path.append('/var/www/FlaskApp/FlaskApp/Base/Model/') 

from FlaskApp import app as application 
application.secret_key = 'as345kj34h5kljj34sy' 

내 모든 내부 수입은 초기화에 아래와 같이 응용 프로그램을 시작 평이다. 파이썬 인터프리터를 명령 행에서 사용할 때 모든 것은 잘 작동합니다.

도움을 주시면 감사하겠습니다.

감사합니다, 메디/마이크

하는 error.log

[Fri Sep 09 22:59:43.068802 2016] [mpm_event:notice] [pid 10719:tid 139878768617344] AH00489: Apache/2.4.7 (Ubuntu) mod_wsgi/3.4 Python/2.7.6 configured -- resuming normal operations 
[Fri Sep 09 22:59:43.068872 2016] [core:notice] [pid 10719:tid 139878768617344] AH00094: Command line: '/usr/sbin/apache2' 
[Fri Sep 09 22:59:47.926252 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] mod_wsgi (pid=10720): Target WSGI script '/var/www/FlaskApp/flaskapp.wsgi' cannot be loaded as Python module. 
[Fri Sep 09 22:59:47.926300 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] mod_wsgi (pid=10720): Exception occurred processing WSGI script '/var/www/FlaskApp/flaskapp.wsgi'. 
[Fri Sep 09 22:59:47.926325 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] Traceback (most recent call last): 
[Fri Sep 09 22:59:47.926343 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] File "/var/www/FlaskApp/flaskapp.wsgi", line 10, in <module> 
[Fri Sep 09 22:59:47.926403 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866]  from FlaskApp import app as application 
[Fri Sep 09 22:59:47.926414 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] File "/var/www/FlaskApp/FlaskApp/__init__.py", line 22, in <module> 
[Fri Sep 09 22:59:47.926848 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866]  from Base.Form import UserRegistrationForm, ProductForm 
[Fri Sep 09 22:59:47.926889 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] File "/var/www/FlaskApp/FlaskApp/Base/Form/__init__.py", line 1, in <module> 
[Fri Sep 09 22:59:47.926975 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866]  from UserRegistrationForm import UserRegistrationForm 
[Fri Sep 09 22:59:47.927007 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] File "/var/www/FlaskApp/FlaskApp/Base/Form/UserRegistrationForm.py", line 2, in <module> 
[Fri Sep 09 22:59:47.927098 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866]  from Base.Model import db_session, User 
[Fri Sep 09 22:59:47.927156 2016] [:error] [pid 10720:tid 139878671300352] [client ::1:55866] ImportError: No module named Base.Model 

flaskapp.wsgi

#!/usr/bin/python 
import sys 
import logging 
logging.basicConfig(stream=sys.stderr) 
sys.path.insert(0,"/var/www/FlaskApp/") 
sys.path.append('/var/www/FlaskApp/FlaskApp/Base/') 
sys.path.append('/var/www/FlaskApp/FlaskApp/Base/Form/') 
sys.path.append('/var/www/FlaskApp/FlaskApp/Base/Model/') 

from FlaskApp import app as application 
application.secret_key = 'as345kj34h5kljj34sy' 

FlaskApp.conf

,536,913 대신 63,210
WSGIPythonPath /var/www/FlaskApp/FlaskApp/Base/:/var/www/FlaskApp/FlaskApp/Base/Form/:/var/www/FlaskApp/FlaskApp/Base/Model/ 

<VirtualHost *:80> 
    ServerName localhost 
    ServerAdmin [email protected] 
    WSGIScriptAlias//var/www/FlaskApp/flaskapp.wsgi 
    <Directory /var/www/FlaskApp/FlaskApp/> 
     Order allow,deny 
     Allow from all 
    </Directory> 
    Alias /static /var/www/FlaskApp/FlaskApp/static 
    <Directory /var/www/FlaskApp/FlaskApp/static/> 
     Order allow,deny 
     Allow from all 
    </Directory> 
    ErrorLog ${APACHE_LOG_DIR}/error.log 
    LogLevel warn 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

</VirtualHost> 

답변

1

: 사용

WSGIPythonPath /var/www/FlaskApp/FlaskApp/Base/:/var/www/FlaskApp/FlaskApp/Base/Form/:/var/www/FlaskApp/FlaskApp/Base/Model/ 

<VirtualHost *:80> 
    ServerName localhost 
    ServerAdmin [email protected] 
    WSGIScriptAlias//var/www/FlaskApp/flaskapp.wsgi 
    <Directory /var/www/FlaskApp/FlaskApp/> 
     Order allow,deny 
     Allow from all 
    </Directory> 
    Alias /static /var/www/FlaskApp/FlaskApp/static 
    <Directory /var/www/FlaskApp/FlaskApp/static/> 
     Order allow,deny 
     Allow from all 
    </Directory> 
    ErrorLog ${APACHE_LOG_DIR}/error.log 
    LogLevel warn 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

</VirtualHost> 

시도 : 만든

<VirtualHost *:80> 
    ServerName localhost 
    ServerAdmin [email protected] 
    WSGIDaemonProcess myapp python-path=/var/www/FlaskApp/FlaskApp 
    WSGIScriptAlias//var/www/FlaskApp/flaskapp.wsgi process-group=myapp application-group=%{GLOBAL} 
    <Directory /var/www/FlaskApp> 
    <Files flaskapp.wsgi> 
     Order allow,deny 
     Allow from all 
    </Files> 
    </Directory> 
    Alias /static /var/www/FlaskApp/FlaskApp/static 
    <Directory /var/www/FlaskApp/FlaskApp/static/> 
     Order allow,deny 
     Allow from all 
    </Directory> 
    ErrorLog ${APACHE_LOG_DIR}/error.log 
    LogLevel warn 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 

</VirtualHost> 

변경 사항은 다음과 같습니다

  1. 사용 mod_wsgi에 데몬 모드하지 포함 된 모드. http://blog.dscpl.com.au/2012/10/why-are-you-using-embedded-mode-of.html
  2. Apache 디렉토리 액세스 권한을 수정하십시오. 아파치 설정의 다른 곳에서 보안 설정을 느껴 보지 않았다면, 제대로 작동하지 않아야한다고 생각했던 것처럼 작동했다. 기본 메커니즘으로 바꿨지 만 Apache 구성에서 Apache가 파일 시스템의 모든 파일을 제공 할 수있는 이유가 무엇인지 알아 내야합니다.
  3. 올바른 파이썬 모듈 검색 경로를 설정하십시오. 데몬 프로세스 그룹으로 전환 한 이후로 데몬 프로세스 그룹을 완료했습니다.
  4. 서브 인터프리터에서 작동하지 않는 타사 확장 모듈에서 파이썬 문제를 피하기 위해 디먼 프로세스 그룹에서 파이썬 메인 (응용 프로그램) 인터프리터 컨텍스트를 사용하는 경우.
+0

고급 수준의 댓글 :) 나는 그것의 모든 세부 사항을 이해하기 위해 언젠가는 많이 걸릴 것입니다. 하지만 지금은 DB 액세스 스레딩 문제가 발생한 것 같습니다. 분명히 sqlite3는 멀티 스레딩과 호환되지 않습니다. 여기에 오류 로그가 있습니다. [Sat Sep 10 02 : 09 : 17.767883 2016] [: 오류] [pid 11618 : tid 140582090196736] ProgrammingError : (sqlite3.ProgrammingError) 스레드에서 생성 된 SQLite 객체는 같은 스레드에서만 사용할 수 있습니다. 객체는 스레드 id 140582190909184 이것은 스레드 ID입니다. 140582090196736 – user1941390

+0

수정 해 주셔서 감사합니다. 그리고 내 대답은 [여기] (http://stackoverflow.com/questions/34009296/using-sqlalchemy-session-from-flask-raises-sqlite-objects-created-in-a-thread-c)를 찾았습니다. – user1941390