当前位置: 首页 > 知识库问答 >
问题:

gunicorn在启动时使用supervisor抛出数据库错误,手动启动时是否正常工作?

宗苗宣
2023-03-14

我创建了一个简单的flash网站,并将其部署在一台服务器上,使用Nginx作为前端,gunicorn作为后端来运行python代码。有了这个设置,一切正常。但是,如果我使用supervisor模块运行服务器,则会出现以下错误。我已经确保所有的环境变量都是可访问的,它们都被放置在了。主目录下的bashrc。

不知道我错过了什么。我的python代码部署在pipenv虚拟环境中的服务器中。supervisor仅在virtualenv中启动。不确定是否有关联。

[2020-11-10 05:45:29604]应用程序中的错误:在调用返回self中的第1020行/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/sqlalchemy/util/_-collections.py”上出现异常。注册表[键]键错误:139749229659968

在处理上述异常期间,发生了另一个异常:

回溯(最近一次调用):文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/flask/app.py”,第2447行,在wsgi_app response=self中。完整调度请求()文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/flask/app.py”,第1952行,完整调度请求rv=self。handle_user_exception(e)File“/home/anandraj/.local/share/virtualenvs/FlaskProject tLcktdEC/lib/python3.8/site packages/flask/app.py”,第1821行,在handle_user_exception reraise(exc_type,exc_value,tb)File“/home/anandraj/.local/share/virtualenvs/FlaskProject tLcktdEC/lib/python3.8/site packages/.py”第39行,在reraise提升值文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/flask/app.py”中,第1950行,以完全调度请求rv=self。分派请求()文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/flask/app.py”,第1936行,分派请求返回self。查看功能规则。endpoint文件“/home/anandraj/FlaskProject/Proj2/main/routes.py”,第12行,在home posts=Post中。查询订购人(Post.date\u posted.desc())。分页(page=page,per_page=7)文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/flask_-sqlalchemy/init.py”,第514行,在get-return类型中。query_class(mapper,session=self.sa.session())文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/sqlalchemy/orm/scoping.py”,第78行,调用返回self。registry()文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/sqlalchemy/util/collections.py”,第1022行,调用返回self。登记处。调用返回self中的setdefault(key,self.createfunc())文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/sqlalchemy/orm/session.py”,第3300行。类(**local_kw)文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/flask_-sqlalchemy/init.py”,init-bind=options中的第138行。pop('bind',None)或db。引擎文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/flask\u-sqlalchemy/init.py”,第943行,在引擎返回自我中。get_engine()文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/flask_-sqlalchemy/init.py”,第962行,在get_引擎返回连接器中。get_engine()文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/flask_-sqlalchemy/init.py”,第555行,在get_engine options=self中。get_options self中的第570行获取_options(sa_url,echo)文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/flask_-sqlalchemy/init.py”_萨。应用驱动程序破解(self.\u app,sau url,options)文件“/home/anandraj/.local/share/virtualenvs/FlaskProject-tLcktdEC/lib/python3.8/site-packages/flask\u-sqlalchemy/init.py”,第883行,如果sau-url应用驱动程序破解。司机姓名。startswith('mysql'):AttributeError:'NoneType'对象没有属性'drivername'

主管配置

cat /etc/supervisor/conf.d/supervisord.conf 
[program:Proj2]
directory=/home/<user>/FlaskProject
command=/home/<user>/.local/share/virtualenvs/FlaskProject->tLcktdEC/bin/gunicorn -w 3 run:app
user=<user>
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
stderr_logfile=/var/log/flaskblog/Proj2Flask.err.log
stdout_logfile=/var/log/flaskblog/Proj2Flask.out.log

查询数据库时出错

~/FlaskProject/Proj2/main$ cat routes.py 
from flask import render_template, request, Blueprint
from Proj2.models import Post


main = Blueprint('main', __name__)


@main.route("/")
@main.route("/home")
def home():
    page = request.args.get('page', 1, type=int)
    posts = Post.query.order_by(Post.date_posted.desc()).paginate(page=page, per_page=7)
    return render_template('home.html', posts=posts)


@main.route("/about")
def about():
    return render_template('about.html', title='Anandraj')

我的应用程序是如何初始化的?

~/FlaskProject/Proj2$ cat __init__.py 
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager
from flask_mail import Mail
from Proj2.config import Config


db = SQLAlchemy()
bcrypt = Bcrypt()
login_mgr = LoginManager()
login_mgr.login_view = 'users.login'
login_mgr.login_message_category = 'info'
mail = Mail()



def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(Config)

    db.init_app(app)
    bcrypt.init_app(app)
    login_mgr.init_app(app)
    mail.init_app(app)

    from Proj2.users.routes import users
    from Proj2.posts.routes import posts
    from Proj2.main.routes import main
    from Proj2.errors.handler import errors
    app.register_blueprint(users)
    app.register_blueprint(posts)
    app.register_blueprint(main)
    app.register_blueprint(errors)
    return app(FlaskProject)

共有1个答案

堵彬彬
2023-03-14

你能发布你的主管配置文件吗?我猜这与你的路径定义有关。。。

编辑(11月12日):在看到你的主管配置文件后,我注意到你还没有设置环境路径。

以KEY="val", KEY2="val2"的形式列出的键/值对列表,这些键/值对将被放置在监督者进程的环境中(并且作为其所有子进程环境的结果)

来自:https://docs.red-dove.com/supervisor/configuration.html

您可以尝试将其添加到配置文件中吗?这将为运行gunicorn的环境将路径定义为“/usr/bin/”。如果这不起作用,请尝试使用virtualenv运行的路径。

environment=PATH="/usr/bin"

 类似资料:
  • 我在清单文件中为我的一个活动定义了一个意图过滤器。当我试图使用以下命令从adb外壳启动此活动时: $adb shell am start 我得到以下错误: 开始:Intent{act=android.Intent.action.VIEW dat=http://www.example.com/gizmospkg=com。实例Android} 错误:活动未启动,无法解析Intent{act=andro

  • 我正在制作一个关于Feign和Hystrix的示例。没有虚假的后备属性,一切正常。但是,当我添加fallback属性并创建实现外部客户机接口的fallback类时,我得到了以下错误 下面是我的虚拟客户端界面: CustomerClient回调实现: 应用类别: Spring云版本: 贝娄是一个修改,但它不工作,以及。

  • 我在本地有一个引导corda网络,并将这些工件分发给相应的VM。当我启动其中一个节点时,我收到以下错误:我使用azure sql作为后端,并且使用corda Enterprise 4.3编译了jar,并且使用的数据库驱动程序是jdbc 6.4。 IntelliJ项目目标设置为仅Javajdk 1.8。 基本信息。-数据库连接url是< br> : jdbc:sqlserver://

  • 问题内容: 我正在尝试构建一个android应用程序,此应用程序的主要功能之一是使其能够在手机启动时自动启动活动,我在手机上看到一些应用程序已经执行了此操作,因此任何帮助都将非常有用。我可以至少通过sdk对此进行更好的研究,谢谢! 问题答案: 您需要像这样实现BroadCastreceiver: 在清单中添加以下内容: 添加权限:

  • 我在模拟器上运行一个Android应用程序。它一直工作到昨天和今天我更新了Android Studio。我得到以下错误。如何解决? 模拟器:警告:将内存大小增加到1GB模拟器:错误: x86仿真目前需要硬件加速!请确保英特尔HAXM已正确安装并可用。CPU加速状态:HAXM必须更新(版本1.1.1

  • 我对GoogleAPI有些问题。 这是错误。 条件:jdk 1.8,Tomcat 8.5 请帮我解决这个错误。