我正在嘗試使用 Nginx 和 Gunicorn 在 Ubuntu 20.04 上部署我的燒瓶應用程式。當我跑步時它一直作業順利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、models.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": "[email protected]",
"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,以便在創建生產資料庫之前繼續測驗應用程式。
我已經在燒瓶檔案 2.2x 中完成了配置處理并嘗試了可能的解決方案,但沒有成功。作為部署的新手,我擔心答案很明顯,錯誤的根源在于眾多的組態檔。如果有人了解問題所在,我將非常感謝他/她的幫助。
uj5u.com熱心網友回復:
在 init.py 你不使用你的配置模塊
嘗試加載您的基本配置,之后app = Flask(__name__)
app.config.from_object('config.Config')
但是如果你在環境變數中沒有 SECRET_KEY 那么 SECRET_KEY 將 None 再次洗掉 app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')
或在 Config 類中將其用于 SECRET_KEY 定義:
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY', config.get('SECRET_KEY'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/507691.html
上一篇:Socket.io客戶端卡在101并使用xhr繼續輪詢
下一篇:使用nginx gunicorn postgresDockerizingflask-sockerio應用程式“應用程式物件必須是可呼叫的。”
