[英]Hosting a Python Flask App on AWS Ubuntu (EC2) using cx_Oracle and mod_wsgi
我正在嘗試托管一個連接到Oracle DB的簡單Python Flask網站。
到目前為止,我已經設法在Ubuntu主機上安裝了cx_Oracle(以及Oracle Client和SDK),並使用Apache2和mod_wsgi成功托管了Flask應用程序。
我按照此指南安裝了cx_Oracle: https : //blogs.oracle.com/opal/entry/configuring_python_cx_oracle_,並且我按照本教程進行了托管: http : //blog.garethdwyer.co.za/2013/07/getting-simple- flask-app-running-on.html
從實例本地運行時,整個應用程序可以完美運行。 我已經使用x-forwarding和firefox對此進行了測試。
但是,當我嘗試通過wsgi運行公共主機時,它可以加載flask應用程序,但是在要求訪問Oracle數據庫時失敗。 我無法獲取錯誤日志,因為Apache日志僅顯示我通過Python手動打印的內容。 (如果有人對此有修復,請告知)。
我花了太多時間嘗試主持-這應該比實際要簡單得多。 解決方案?
我的目錄結構
->/var/www/SACK
->app.py
->app.wsgi
->satic/
->templates/
->/etc/apache2/sites-available
->sitename.com.config
->/opt/oracle/instant_client_12_1
->... Oracle client stuff. SDK included.
app.py
app = Flask(__name__)
...
def connectToDB():
ip = '...'
port = ...
SID = '...'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)
global connection
connection = cx_Oracle.connect('...', '...', dsn_tns)
print "connection successful"
global cursor
cursor = connection.cursor()
def closeConnection():
cursor.close()
connection.close()
print "connection closed"
def main():
connectToDB()
app.run()
closeConnection()
if __name__ == '__main__':
main()
根據這些指南,這是為wsgi設置我的應用程序的方式:
app.wsgi
import sys
sys.path.insert(0, '/var/www/SACK')
from app import app as application
站點配置:
sitename.com.config
<VirtualHost *:80>
WSGIDaemonProcess SACK
WSGIScriptAlias / /var/www/SACK/app.wsgi
<Directory /var/www/SACK>
WSGIProcessGroup SACK
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
LogLevel info
ErrorLog "/var/log/apache2/error.log"
CustomLog "/var/log/apache2/access.log" combine
</VirtualHost>
我的wsgi配置為僅運行實際的Flask應用程序本身,也就是app.run()
包含的代碼,因此,當wsgi創建應用程序時, connectToDB()
函數實際上不會運行。
我沒有在wsgi配置中解決此問題,而是使用flask的@ app.before_request()和@ app.teardown_request批注創建和銷毀了數據庫連接。
代碼更改:
@app.before_request()
def connectToDB():
....
@app.teardown_request()
def closeConnection(e):
....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.