我已經完成了一個簡單的Flask應用程序,該應用程序試圖在帶有Apache2的AWS EC2實例上託管。我一直在關注this tutorial。在EC2上部署Flask應用程序以進行本地主機訪問
只有我的開發過程(其中應用程序,當我運行它,然後嘗試通過本地主機訪問它運行完全正常)所做的更改是:
1) Moved all the code in to /var/www
2) Changed it so that
if __name__=='__main__':
app.run(debug = False) #Now False instead of True
3) Added a app.wsgi file
4) Added file my_app to /etc/apache2/sites-available
5) Ran these commands:
$ sudo a2dissite default
$ sudo a2ensite sitename.com
$ sudo /etc/init.d/apache2 restart
這裏是應用程序。 WSGI文件:
import sys
sys.path.insert(0, '/var/www/my_app')
from app import app as application
這裏是/etc/apache2/sites-available
的程序my_app文件:
<VirtualHost *:5000>
WSGIDaemonProcess app
WSGIScriptAlias//var/www/my_app/app.wsgi
<Directory /var/www/my_app>
WSGIProcessGroup app
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from 127.0.0.1
</Directory>
</VirtualHost>
正如你從上面的文件中看到的,我只想在本地主機上使用容器應用程序。
當我運行apache並嘗試訪問網站my_site.com:5000
時,出現「無法連接錯誤」。我無法弄清楚爲什麼。任何幫助,將不勝感激。
而且,這裏是我的瓶應用程序本身的目錄結構,如果這是需要的:
/var/www/my_app/
app/
__init__.py
static/
css/
bootstrap.css
favicon.ico
js/
bootstrap.js
templates/
base.html
index.html
search.html
views.py
app.wsgi
flask/ #my virtualenv
#Your typical virutalenv structure
flask_util_js.py #File that is a FLask entension for client-side generation of URLs
requirements.txt
run.py
virtualenv.py #Creates virutalenv flask
UPDATE:
所以,我的感覺是,我有辦法我代碼設置是有問題的。所以我把run.py
,__init__.py
和views.py
中的所有東西都拿了下來,並做了一個大的main.py
。我已經更新了我app.wsgi
看起來像這樣:
app.wsgi
import sys
activate_this = '/home/achumbley/flask/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
sys.path.insert(0, '/home/achumbley/new_flask_app')
from main import app as application
而現在,我/etc/apache2/sites-available/new_flask_app
樣子:
<VirtualHost *>
ServerName dev.east.appliedminds.com
WSGIDaemonProcess app
WSGIScriptAlias//var/www/app.wsgi
<Directory /home/achumbley/new_flask_app>
WSGIProcessGroup main
WSGIScriptReloading On
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
最後,他是我的最新目錄結構:
/home/my_username/new_flask_app/
logging.log
flask_util_js.py
main.py
static/
templates/
它仍然不起作用。但是,我可能不知道如何運行整個事情。我應該運行一個python main.py
對不對?它應該是自動的,至少這是我所設想的。
好吧,所以我將代碼移出並使用app.wsgi文件中的應用程序的絕對路徑。重新啓動apache,但仍然不起作用。它現在應該工作嗎?另外,我還看到了很多其他示例,顯示了位於/ var/www中的整個應用程序,您確定不允許其中存在代碼? –
是的,絕對確定。你在'app'目錄下沒有'app',這就是爲什麼它不起作用。導入行應該引用你有'if __name__ =='__main __''行的模塊。 –
Gah,所以我完全重構了我的代碼,以便所有內容都包含在您的示例中的main.py中。我認爲我做的一切都是正確的。但它仍然不會服務我的應用程序...更新的問題 –