Я пытаюсь развернуть приложение фляги на общем сервере (hostgator) с использованием CGI, но при использовании базового URL (mysite.com/) и всех остальных я получаю сообщение об ошибке «URL-адрес не найден». Я установил виртуальную среду в папке public_html / с python 2.7.8 и Flask 0.12.4 (более новые версии flask не поддерживаются на python 2.7.8, потому что они используют SSLContext).
определили, что файл .htaccess и файл cgi-bin / main.cgi настроены правильно, написав небольшое приложение hello_world в фляге в папке public_html /, которая работает и запускает веб-сайт. И я попытался проверить журналы ошибок на cpanel, которые пусты и не смогли найти другие полезные журналы в файловой системе. Я также установил все разрешения на 755. Это то, что hostgator рекомендовал безрезультатно.
Моя файловая система такова:
public_html/
flask_hello_world.py
some .html files for testing
cgi-bin/
main.cgi
server/
app.py
__init__.py
views.py
models.py (sqlalchemy models)
static/
some .html files
Мой файл .htaccess:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /home4/MYSITE/public_html/cgi-bin/main.cgi/$1 [L]
Addhandler cgi-script .py .cgi
main.cgi:
#!/home4/MYSITE/public_html/venv/bin/python
import sys
sys.path.insert(0, '/home4/MYSITE/public_html/venv/lib/python2.7/site-packages/')
sys.path.insert(1, '/home4/MYSITE/public_html/server/')
from wsgiref.handlers import CGIHandler
from app import app
class ProxyFix(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['SERVER_NAME'] = ""
environ['SERVER_PORT'] = "80"
environ['REQUEST_METHOD'] = "GET"
environ['SCRIPT_NAME'] = ""
environ['QUERY_STRING'] = ""
environ['SERVER_PROTOCOL'] = "HTTP/1.1"
return self.app(environ, start_response)
if __name__ == '__main__':
app.wsgi_app = ProxyFix(app.wsgi_app)
CGIHandler().run(app)
И когда я изменил main.cgi для запуска flask_hello_world.py, он запустился очень хорошо. Вот этот код:
import flask
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return flask.send_from_directory('/home4/MYSITE/public_html/','index.html')
@app.route('/hello')
def hello():
return flask.send_from_directory('/home4/MYSITE/public_html/','hello.html')
Перемещение .py файлов моего основного проекта в папку public_html не решило проблему. Вот app.py и init .py из фактического проекта:
app.py:
import os
basedir = os.path.abspath(os.path.dirname(__file__))
from flask import Flask
##other imports including sqlalchemy
app = Flask(__name__)
app.config["CACHE_TYPE"] = "null"
# sqlalchemy setup
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'database.db')
##some other configurations
db = SQLAlchemy(app)
migrate = Migrate(app, db)
# flask login setup
login_manager = LoginManager()
login_manager.login_view = "login_view"
login_manager.init_app(app)
init.py:
from app import app, db, login_manager
import models
import views
Мой views.py не содержит ошибок импорта, когда я просто запускаю его с помощью «python views.py», а маршрут для «/» идентичен приложению hello world. Поэтому я думаю, что есть проблема с app.py, init .py или с тем, что мои маршруты отсутствуют в файле app.py.