我最近一直在努力将我的 Flask 应用程序部署到 AWS ElasticBeanstalk。我对 Web 项目和 AWS 还很陌生,所以每天都很挣扎。每隔一段时间,我就会将我的项目部署到 EB(我过去已经能够解决问题),但是自从我将我的应用程序从单一的application.py
方法重组为更加结构化的方法后,我一直在努力。部署本身已经成功,但我遇到了 500 错误。日志说:
[Wed Apr 19 00:11:57.895790 2017] [:error] mod_wsgi (pid=15947):目标 WSGI 脚本“/opt/python/current/app/app/members/views.py”无法作为 Python 模块加载。 [Wed Apr 19 00:11:57.895846 2017] [:error] mod_wsgi (pid=15947):处理 WSGI 脚本“/opt/python/current/app/app/members/views.py”时发生异常。 [Wed Apr 19 00:11:57.895865 2017] [:error] 回溯(最近一次通话): [Wed Apr 19 00:11:57.895881 2017] [:error] File "/opt/python/current/app/app /members/views.py”,第 14 行,在 [Wed Apr 19 00:11:57.895903 2017] [:error] @application.route('/') [Wed Apr 19 00:11:57.895909 2017] [:error] ] 装饰器中的文件“/opt/python/run/venv/lib/python2.7/site-packages/flask/app.py”,第 1080 行 [Wed Apr 19 00:11:57.895921 2017] [:error] self.add_url_rule(rule, endpoint, f, **options) [2017 年 4 月 19 日星期三 00:11:57.895935] [:error] 文件“/opt/python/run/venv/lib/python2.7/site-packages/flask/app.py”,第 64 行,在 wrapper_func [星期三4 月 19 日 00:11:57.895944 2017] [:error] 返回 f(self, *args, **kwargs) [Wed Apr 19 00:11:57.895949 2017] [:error] 文件“/opt/python/run/venv /lib/python2.7/site-packages/flask/app.py”,第 1051 行,在 add_url_rule [Wed Apr 19 00:11:57.895956 2017] [:error] '现有端点函数:%s'% 端点) [ Wed Apr 19 00:11:57.895969 2017] [:error] AssertionError:视图函数映射正在覆盖现有的端点函数:索引
我的应用程序结构是:
myApp/ runServer.py requirements.txt app/ __init__.py config.py static/ members/ __init__.py views.py models.py templates/
我的.ebextensions/<env-name>.config
包含:
option_settings: "aws:elasticbeanstalk:container:python": WSGIPath: app/members/views.py
最后,我的views.py
文件包含我所有的 url 路由。我已确保所有函数名称都相同。
有人知道我在看什么样的问题/解决方案吗?我可以提供更多信息来提供帮助吗?
谢谢!
编辑:将我的def index()
函数更改views.py
为def newFunctionForTesting()
产生AssertionError: View function mapping is overwriting an existing endpoint function: newFunctionForTesting
编辑 2:它可能与此类似,但在那种情况下,建议的解决方案是将所有内容都写在一个文件中,这不是我正在寻找的方法......也许蓝图可以更好地工作......
编辑 3:这是我的应用程序的样子。
app\__init__.py
from flask import Flask, flash, request from urlparse import urlparse, urljoin from urllib2 import urlopen from flask_user import SQLAlchemyAdapter, UserManager, current_user import os from apscheduler.schedulers.background import BackgroundScheduler import pandas as pd from app.members.models import db, User , AcademicData, Role, UserRoles, Query from passlib.hash import bcrypt import datetime import json # 初始化应用 程序 application = Flask(__name__) application.config.from_object("app.config.Config") # 初始化 db db.init_app(application) # 使用 application.app_context()向数据库注册用户模型: db.create_all() # 创建定义的表 db_adapter = SQLAlchemyAdapter(db, User) # 注册用户模型 @application.before_first_request def initialize(): scheduler = BackgroundScheduler() scheduler .start() scheduler.add_job(updateData, trigger = "interval", days = 1) def updateData(): ... @application.context_processor def injectFunction(): def getDataTable(id): ... import members.views # 初始化烧瓶用户 user_manager = UserManager(db_adapter, application,register_view_function = members.views.protected_register)
app\members\views.py
从flask导入重定向,url_for,render_template, 从flask_user请求导入login_required,roles_required,views as user_views from app import application, SITE_ROOT import json import os import pandas as pd @application.route('/') def index(): "" " 索引视图。当前仪表板。 :return: """ return redirect(url_for('dashboard')) @application.route('/dashboard') @login_required def dashboard(): ... return render_template('dashboard. html' def table(): @应用程序。路线('/表') @login_required return render_template('table.html') @application.errorhandler(404) def not_found(error): return render_template('404.html') @application.errorhandler(500) @application.errorhandler(503) def server_error( error): return render_template('503.html') @roles_required('admin') def protected_register(): return user_views.register()
我按照这个例子来设置我的 WSGIPath,但是自从@davidism 指出它,我尝试了一种不同的方法并且它起作用了。我创建了一个app.wsgi
文件,它基本上只是导入我的应用程序对象并WSGIPath: app/app.wsgi
在我的.ebextensions/<env-name>.config
. 该应用程序现在通过 Elastic Beanstalk 成功部署和启动。我的静态资源停止工作,但我必须更新Configuration > Software Configuration > Static Files
Elastic Beanstalk 控制台中静态文件夹的映射。
谢谢!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句