我正在尝试使用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中的配置处理,并尝试了可能的解决方案,但都没有成功。作为部署的新手,我担心答案是显而易见的,错误的根源在于大量的配置文件。如果有人了解问题所在,我将非常感谢他/她的帮助。
1条答案
按热度按时间dldeef671#
在init.py中,您不使用您的配置模块
尝试在
app = Flask(__name__)
之后加载您的基本配置但是,如果您在环境变量中没有SECRET_KEY,则SECRET_KEY将再次为空,然后删除app.config[‘SECRET_KEY’]=os.Environmental.get(‘SECRET_KEY’)
或者在Config类中将其用于Secure_Key定义,如下所示: