Ошибка URL-адреса не найдена при развертывании приложения фляги с использованием CGI - PullRequest
0 голосов
/ 12 октября 2019

Я пытаюсь развернуть приложение фляги на общем сервере (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.

1 Ответ

0 голосов
/ 10 ноября 2019

Возможно, проблема в том, что представления не импортируются в app.py или init.py, поэтому они неизвестны приложению. Таким образом CGI-скрипт выбросил URL-адрес не найден

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...