错误:运行错误:会话不可用,因为未设置密钥,将应用程序上的SECRET_KEY设置为唯一且保密的内容

polkgigr  于 2022-09-20  发布在  Nginx
关注(0)|答案(1)|浏览(219)

我正在尝试使用Nginx和Gunicorn在Ubuntu20.04上部署我的FASK应用程序。当我先运行FLASK_APP=run.py,然后运行gunicorn -w 9 run=app时,它运行得很顺利。然而,当我为Gunicorn和一个config.py设置配置文件时,我只能访问主页,但每隔一条路由都会导致一个内部服务器错误。我将我的日志文件设置为/var/log/app_name/app_name.err.log。日志中报告的错误为raise RuntimeError( RuntimeError: The session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret.

下面是我的应用程序模块中的一个config.py的副本,其中routes.py、mods.py和forms.py位于其中。

import os
import json

with open('/etc/scheye_config.json') as config_file:
config = json.load(config_file)

class Config:
   SECRET_KEY = config.get('SECRET_KEY')
   SQL_ALCHEMY_DATABASE_URI = config.get('SQL_ALCHEMY_DATABASE_URI')
   MAIL_SERVER = config.get('MAIL_SERVER')
   MAIL_PORT = 587
   MAIL_USE_TLS = True
   MAIL_USERNAME = config.get('EMAIL_USER')
   MAIL_PASSWORD = config.get('APPLICATION_PASS')

如您所见,我正在从json.config文件导入设置,该文件的代码如下所示。Json文件的位置是/etc/app_name.json。

{

"SECRET_KEY": "mysecretkey",
"SQLALCHEMY_DATABASE_URI": "database_uri",
"EMAIL_USER": "mymail@mail.com",
"APPLICATION_PASS": "application_password",
"MAIL_SERVER": "smtp.servermail.com"
 }

在我的init.py中也有几乎相同的配置,只是我使用了环境变量。这是init.py的副本。

import os
from flask import Flask
from sqlalchemy.orm import backref
from flask_sqlalchemy import SQLAlchemy
from flask_bcrypt import Bcrypt
from flask_login import LoginManager, login_manager
from flask_mail import Mail

from sqlalchemy import create_engine

app = Flask(__name__)

app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')

# configuring the database using SQLAlchemy

ENV = 'dev'
if ENV == 'dev':
   app.debug=True
   app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('SQLALCHEMY_DATABASE_URI')
else:
    app.debug=False
    app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('SQLALCHEMY_DATABASE_URI')
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)
bcrypt = Bcrypt(app)
login_manager= LoginManager(app)
login_manager.login_view='login' #
login_manager.login_message_category='info' #styling the message returned
app.config['MAIL_SERVER'] = os.environ.get('MAIL_SERVER')
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USERNAME']= os.environ.get('EMAIL_USER')
app.config['MAIL_PASSWORD']= os.environ.get('APPLICATION_PASS')

# initializing our extension

mail = Mail(app)

engine = create_engine('database_uri')
connection = engine.raw_connection()
cursor = connection.cursor()

from app_name import routes

我特意设置了我的SQLALCHEMY_DATABASE_URI,以便在创建生产数据库之前继续测试应用程序。

我已经完成了FASK文档2.2x中的配置处理,并尝试了可能的解决方案,但都没有成功。作为部署的新手,我担心答案是显而易见的,错误的根源在于大量的配置文件。如果有人了解问题所在,我将非常感谢他/她的帮助。

dldeef67

dldeef671#

在init.py中,您不使用您的配置模块

尝试在app = Flask(__name__)之后加载您的基本配置

app.config.from_object('config.Config')

但是,如果您在环境变量中没有SECRET_KEY,则SECRET_KEY将再次为空,然后删除app.config[‘SECRET_KEY’]=os.Environmental.get(‘SECRET_KEY’)

或者在Config类中将其用于Secure_Key定义,如下所示:

class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY', config.get('SECRET_KEY'))

相关问题