Колба /Heroku ClearDB не обновляется
Я развернул свое приложение Python на Heroku и подключил его к базе данных 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.
Это совершенно случайно, работает ли это или нет. Операторы извлечения прекрасно работают, но вставка или обновление, кажется, вызывает у меня много проблем. Опять же, это прекрасно работает без локальных проблем, но не с Heroku. (При локальном запуске для сохранения данных требуется немного времени, и это нормально. Но на Heroku это не занимает много времени, поэтому я предполагаю, что он каким-то образом пропускает коммит).
В логах тоже нет ошибок. Кажется, что это иногда игнорирует утверждение, а не фиксирует. Выполнение жесткого обновления иногда возвращает данные, но затем они снова исчезают. В большинстве случаев данные не сохраняются вообще.
У меня один курсор открыт во всем приложении, и я использую conn.ping(True)
перед каждым оператором SQL, и conn.commit()
после получения данных.
Любая помощь будет оценена, спасибо!
1 ответ
Героку использует двух мастеров. так что иногда ваши учетные данные доступны, а иногда нет, в вашем профиле вы должны иметь
веб: gunicorn --workers=1 приложение: приложение
работников = 1 означает, что ваши данные будут на одном главном сервере, приложение = приложение - это только моя точка входа, ваши могут быть тем, что есть у вас.
Ниже представлен Heroku Dual Masters, один URL-адрес соединения с базой данных. Надстройка ClearDB Heroku размещает вашу базу данных на двух серверах базы данных "multi-master" в двух разных регионах Amazon EC2, чтобы обеспечить абсолютную доступность данных. В нашем дополнении 1.0 это означало, что вы получили два подключения к базе данных. Теперь, с нашей собственной технологией маршрутизации высокой доступности SQL, вы получаете одно соединение, которое автоматически переключается на вторичную конечную точку в случае сбоя и переключается обратно на первичный мастер после восстановления службы и восстановления баз данных. синхронизированы.
Основной главный узел расположен в непосредственной близости от Heroku, в регионе Amazon EC2 "США-Восток". Вторичный главный узел расположен в регионе Amazon США "США-Запад" для целей высокой доступности.