Я закончил простое приложение Flask, которое я пытаюсь разместить на экземпляре AWS EC2 с Apache2. Я следующие this tutorial.Установка приложения Flask на EC2 для доступа к локальному хосту
Единственные изменения, которые я сделал из процесса разработки (в котором приложение работает совершенно нормально, когда я запускаю его, а затем попытаться получить к нему доступ с помощью локального хоста) являются:
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
Вот файл my_app в /etc/apache2/sites-available
:
<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, которое у вас есть в вашем примере. И я подумал, что сделал все правильно. Но он все равно не будет служить моему приложению ... Обновленный вопрос –