gpt4 book ai didi

apache - 带有mod_wsgi,Apache的托管 flask

转载 作者:行者123 更新时间:2023-12-03 17:36:12 27 4
gpt4 key购买 nike

我用Flask编写了一个小应用程序,并且试图使其在Linode服务器上工作。
但是目前,如果我在浏览器中输入服务器IP地址,则会得到文件列表。

我没有在virtualenv中安装python(当前),检查是否可以正常工作。

我一直在关注本教程:https://www.digitalocean.com/community/articles/how-to-deploy-a-flask-application-on-an-ubuntu-vps

我的应用程序结构如下(最上面的文件夹位于/ var / www /中):

|--mythmuff/
|----mythmuff/
|------__init__.py
|------app.db
|------config.py
|------models.py
|------templates/
|--------index.html
|------views.py
|--mythmuff.wsgi


这是我的init.py:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.mail import Mail
import os
basedir = os.path.abspath(os.path.dirname(__file__))


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'app.db')
# app email settings go here
mail = Mail(app)
db = SQLAlchemy(app)

import views
import models


这是我的mythmuff.wsgi:

import sys
sys.path.insert(0, '/var/www/mythmuff')
from mythmuff import app as application


这是我的/etc/apache2/sites-available/mythmuff.ru.conf(我将Apache“指向”文件)。

<VirtualHost *:80>
ServerName mythmuff.ru

WSGIDaemonProcess mythmuff user=www-data group=www-data threads=5
WSGIScriptAlias / /var/www/mythmuff/mythmuff.wsgi

<Directory var/www/mythmuff/mythmuff>
Order allow,deny
Allow from all
</Directory>
Alias /static /var/www/mythmuff/mythmuff/static
<Directory /var/www/mythmuff/mythmuff/static>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
</VirtualHost>


我在设置Apache / wsgi方面很新,但是我认为当我转到IP地址并仅获得/ var / www /目录中的文件和文件夹列表时,我就在某处缺少 app.run()
我尝试将其添加到 __init__.py

if __name__ == "__main__":
app.run()


但是在家用计算机上运行 __init__.py时出现错误:

  File "/Users/georgeoblapenko/Dropbox/University/Python/flask/MythMuff/mythmuff/mythmuff/__init__.py", line 18, in <module>
import views
File "/Users/georgeoblapenko/Dropbox/University/Python/flask/MythMuff/mythmuff/mythmuff/views.py", line 5, in <module>
from models import Product
File "/Users/georgeoblapenko/Dropbox/University/Python/flask/MythMuff/mythmuff/mythmuff/models.py", line 6, in <module>
class Product(db.Model):
File "/Users/georgeoblapenko/anaconda/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 510, in __init__
DeclarativeMeta.__init__(self, name, bases, d)
File "/Users/georgeoblapenko/anaconda/lib/python2.7/site-packages/sqlalchemy/ext/declarative/api.py", line 53, in __init__
_as_declarative(cls, classname, cls.__dict__)
File "/Users/georgeoblapenko/anaconda/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 246, in _as_declarative
**table_kw)
File "/Users/georgeoblapenko/anaconda/lib/python2.7/site-packages/sqlalchemy/sql/schema.py", line 342, in __new__
"existing Table object." % key)
sqlalchemy.exc.InvalidRequestError: Table 'product' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns on an existing Table object.


在家里,我从顶部的mythmuff文件夹中运行了runserver.py脚本进行测试(如此处记录: http://flask.pocoo.org/docs/patterns/packages/)。

那么,我需要添加什么才能使整个事情真正起作用?

更新:
我决定运行一个简单的wsgi hello世界测试。所以我将mythmuff.wsgi中的所有内容替换为

import os
import sys
sys.path.append('/var/www/mythmuff/mythmuff')

def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'

response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]


但是,我仍然得到文件/文件夹列表,而不是“ Hello World!”。页。
因此,由于某种原因,该请求似乎没有传递给WSGI。

最佳答案

好的,我设法弄清楚了。原来,我删除了默认的Apache index.html文件,并且没有禁用000-default.conf(通过dissite),所以这就是它显示文件夹的原因。
现在一切正常。

关于apache - 带有mod_wsgi,Apache的托管 flask ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21604912/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com