我已经在Heroku上部署了我的Python应用程序,并将其连接到一个clearDB数据库。当在本地运行时,这可以很好地工作,但是当在Heroku上运行时,我的INSERT语句似乎没有正确提交(有时提交,有时不提交)。它正在黑角兽中运行。
这是我的MySQL设置:
APP_ROOT = os.path.join(os.path.dirname(__file__), '..')
dotenv_path = os.path.join(APP_ROOT, '.env')
load_dotenv(dotenv_path)
db_user = os.getenv('DB_USER2')
db_pass = os.getenv('DB_PASSWORD2')
db_database = os.getenv('DB_DATABASE2')
db_host = os.getenv('DB_HOST2')
app.config['MYSQL_DATABASE_USER'] = db_user
app.config['MYSQL_DATABASE_PASSWORD'] = db_pass
app.config['MYSQL_DATABASE_DB'] = db_database
app.config['MYSQL_DATABASE_HOST'] = db_host
mysql.init_app(app)这些变量来自.env文件。但它们也被添加为Heroku上的环境变量。因此,与服务器的连接在本地和Heroku上都是相同的。
无论它是否工作,它都是完全随机的。Fetch语句可以很好地工作,但是插入或更新似乎会给我带来很多问题。同样,这在本地运行得很好,没有问题,但在Heroku上就不行。(在本地运行时,似乎需要一些时间来保存数据,这是可以接受的。但在Heroku上它根本不会花费太多时间,所以我假设它以某种方式跳过了提交)。
日志中也没有错误。它有时似乎会绕过语句,而不是提交。执行硬刷新有时会调出数据,但随后数据会再次消失。大多数情况下,数据根本不会保存。
我在整个应用程序中打开了一个游标,并且在每条SQL语句之前使用conn.ping(True),在获取数据之后使用conn.commit()。
如有任何帮助,将不胜感激,谢谢!
发布于 2018-04-24 15:31:04
Heroku使用两个master。因此,您凭证有时可用,有时不可用,在procfile中,您必须具有
工人网络: gunicorn -=1个app:app
workers=1意味着您的数据将存储在一个主机上,app=app只是我的入口点,您的数据可以是您所拥有的。
下面是来自Heroku双主机,一个数据库连接URL的ClearDB Heroku附加组件在两个不同的亚马逊EC2区域的两个“多主机”数据库服务器上配置您的数据库,以确保绝对的数据可用性。在我们的1.0附加组件中,这意味着您收到了两个数据库连接。现在,使用我们的自定义SQL高可用性路由技术,您可以获得单个连接,该连接在发生故障时自动故障转移到辅助终结点,并在服务恢复和数据库重新同步后切换回主要主节点。
主节点位于亚马逊的EC2 "US-East“区域中的Heroku旁边。辅助主节点位于亚马逊的EC2 "US-West“区域,以实现高可用性。
https://stackoverflow.com/questions/47705215
复制相似问题