python - 如何基于 Flask mega 教程在 pythonanywhere 上设置 Flask

标签 python mysql flask pythonanywhere flask-migrate

我目前正在开发一个应用程序。此网络应用程序有其自己的域。最初创建时,我使用 cname 设置了域名和注册商,几个小时后成功显示“这是一个 Flask 应用程序...” 类似的内容。

我决定遵循 Grinberg 先生在他的书中的示例(在本地主机上功能齐全)。所以我将我的个人存储库克隆到 pythonanywhere 并运行以下命令。

python manage.py db init
python manage.py db upgrade
python manage.py migrate

到目前为止一切都很好。我使用 mysql workbench 检查了 mysql 数据库。

现在是我的问题了。

当我运行python manage.py runserver

它向我抛出以下错误。

/home/username/.virtualenvs/webapp/local/lib/python2.7/site-packages

/flask_sqlalchemy/__init__.py:800: UserWarning: SQLALCHEMY_TRACK_MODIFICA
TIONS adds significant overhead and will be disabled by default in the future.  Set it to True to suppress this warning.
  warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True to su
ppress this warning.')
Traceback (most recent call last):
  File "manage.py", line 20, in <module>
    manager.run()
  File "/home/username/.virtualenvs/webapp/local/lib/python2.7/site-packages/flask_script/__init__.py", line 412, in run
    result = self.handle(sys.argv[0], sys.argv[1:])
  File "/home/username/.virtualenvs/webapp/local/lib/python2.7/site-packages/flask_script/__init__.py", line 383, in handle
    res = handle(*args, **config)
  File "/home/username/.virtualenvs/webapp/local/lib/python2.7/site-packages/flask_script/commands.py", line 425, in __call__
    **self.server_options)
  File "/home/username/.virtualenvs/webapp/local/lib/python2.7/site-packages/flask/app.py", line 843, in run
    run_simple(host, port, self, **options)
  File "/home/username/.virtualenvs/webapp/local/lib/python2.7/site-packages/werkzeug/serving.py", line 677, in run_simple
    s.bind((hostname, port))
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use

我尝试禁用 wsgi.py 文件(注释掉所有内容)仍然一样。

要知道的事情:

  1. 我有付费帐户。
  2. 这是 pythonanywhere 上的第二个 Web 应用程序。 (第一个不是根据教程建模的,工作得很好)

编辑

我将端口从 5000 更改为 9000。它在控制台中运行。但我无法访问我的网站。我应该注释掉 wsgi 文件吗?

目前看起来像这样:

import sys

# # add your project directory to the sys.path
project_home = u'/home/username/e_orders/e_orders'
if project_home not in sys.path:
    sys.path = [project_home] + sys.path

# # import flask app but need to call it "application" for WSGI to work
from manager import app as application

ma​​nage.py

import os
from app import create_app, db
from app.models import User
from flask_script import Manager, Shell, Server
from flask_migrate import Migrate, MigrateCommand


app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
migrate = Migrate(app, db)


def make_shell_context():
    return dict(app=app, db=db, User=User)

manager.add_command('shell', Shell(make_context=make_shell_context))
manager.add_command('db', MigrateCommand)
manager.add_command('runserver', Server(port=9000))
if __name__ == '__main__':
    manager.run()

编辑2

上面的 wsgi 配置出现以下错误。

错误日志

ImportError: No module named manager
2016-08-04 17:42:39,589 :Error running WSGI application
Traceback (most recent call last):
  File "/bin/user_wsgi_wrapper.py", line 154, in __call__
    app_iterator = self.app(environ, start_response)
  File "/bin/user_wsgi_wrapper.py", line 170, in import_error_application
    raise e
ImportError: No module named manager

最佳答案

这里是PythonAnywhere 开发者。

如果您从 PythonAnywhere 上的控制台运行 Flask 应用程序,则实际上无法从其他任何地方访问它。它可能会很好地运行,但没有任何东西会将任何请求路由到它。因此,无需从控制台运行任何内容(我猜,除非您只是测试语法错误)。

相反,您需要在“Web”选项卡上创建一个 Web 应用程序 - 看起来您已经这样做了。然后使用您似乎已经发现的 WSGI 文件进行路由。

如果您已完成所有这些操作,那么当您访问“Web”选项卡上显示的域(通常类似于您的用户名.pythonanywhere.com)时,你应该看到你的网站。如果出现错误,请查看错误日志(也可以从“Web”选项卡链接),这应该可以帮助您进行调试。

[编辑:添加隶属关系]

关于python - 如何基于 Flask mega 教程在 pythonanywhere 上设置 Flask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38773135/

相关文章:

python - Python 中的 Selenium : Select the second element with given link text

php - 哪个更快,将聊天记录保存在文本文件中并显示,或者使用 mysql db 保存聊天记录

java - 由于截断异常,MySQL 无法可靠地获取 auto inc 值返回

php - 尝试更新小时表中的 time_out 时出现语法错误

python - 来自函数打印的生成器

css - 如何修改jinja2模板中的SelectField宽度

python - 使用 Flask-reSTLess 对具有关系的 POST 提出错误请求

python - 合并分支覆盖文件python

python - 将 .pb 文件转换为 .ckpt (tensorflow)

python - 在linux上运行autobahn python会出现异常。AttributeError : Router instance has no attribute 'broker'