我有一個在本地正常作業的燒瓶 MySql 應用程式,但是當我部署到 heroku 時,它給了我以下錯誤:
2022-02-12T05:28:26.114583 00:00 app[web.1]: File "/app/app.py", line 38, in <module>
2022-02-12T05:28:26.114583 00:00 app[web.1]: app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
2022-02-12T05:28:26.114584 00:00 app[web.1]: TypeError: 'str' object does not support item assignment
當我使用app.debug = False. 我試圖通過洗掉它來修復它,但現在它給了我以上錯誤。
我嘗試評論每行給出錯誤,并且看起來下面的所有行都給出相同的錯誤:
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SESSION_PERMANENT'] = False
app.config['SESSION_TYPE'] = "filesystem"
在這些行之前的幾行app.config['MAIL_USE_SSL'] = True以及其他一些郵件配置設定(埠、服務器、用戶名、密碼)都沒有給出錯誤,所以我不明白問題是什么。當我用谷歌搜索錯誤時,它與字串的不變性有關,所以我不明白我的情況有什么問題。
當我評論以上所有內容時,它給了我:
2022-02-12T08:11:34.109191 00:00 app[web.1]: Session(app)
2022-02-12T08:11:34.109196 00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask_session/__init__.py", line 54, in __init__
2022-02-12T08:11:34.109196 00:00 app[web.1]: self.init_app(app)
2022-02-12T08:11:34.109196 00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask_session/__init__.py", line 61, in init_app
2022-02-12T08:11:34.109197 00:00 app[web.1]: app.session_interface = self._get_interface(app)
2022-02-12T08:11:34.109197 00:00 app[web.1]: File "/app/.heroku/python/lib/python3.8/site-packages/flask_session/__init__.py", line 64, in _get_interface
2022-02-12T08:11:34.109197 00:00 app[web.1]: config = app.config.copy()
2022-02-12T08:11:34.109198 00:00 app[web.1]: AttributeError: 'str' object has no attribute 'copy'
如果這與此問題有關,我在 heroku 上使用 JawsDB MySQL 插件。
下面是代碼:
from flask import Flask
from flask_mail import Mail
from os import environ
from flask_session import Session
from flask_cors import CORS
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['MAIL_SERVER'] = 'smtp.domain.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = "[email protected]"
app.config['MAIL_PASSWORD'] = environ.get("MAIL_PASSWORD")
mail = Mail(app)
MY_APP_ENV = environ.get("MY_APP_ENV")
if MY_APP_ENV == 'prod':
app.debug = False
app.config = environ.get("JAWSDB_URL")
else:
app.debug = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:@localhost/my_app'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SESSION_PERMANENT'] = False
app.config['SESSION_TYPE'] = "filesystem"
Session(app)
CORS(app)
db = SQLAlchemy(app)
# rest is the routings etc.
uj5u.com熱心網友回復:
這是問題所在:
app.config = environ.get("JAWSDB_URL")
您正在app.config使用環境中的單個值覆寫。
你的意思是這樣的嗎?
app.config["SQLALCHEMY_DATABASE_URI"] = environ.get("JAWSDB_URL")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/428154.html
