Я разрабатываю веб-сайт, чтобы сделать собственное портфолио. Я хотел перейти на облачный сервис Google. Я получил свое приложение и базу данных. Я могу подключиться через ip, но если другой экземпляр создает, ip должен быть сначала занесен в белый список.
URL-адрес SQLAlchemly - это то, что я видел, было ответом. Но я хочу продолжать работать с peewee, если это возможно.
Может ли кто-нибудь объяснить мне, почему мой код не подключается из движка приложения к облачному sql.
Мой код
"""Main script for the blog website."""
from flask import Flask
from peewee import *
from livereload import Server, shell
from flask_uploads import UploadSet, IMAGES, configure_uploads
from flask_login import LoginManager, login_user
from jinja2 import Environment
import os
from playhouse.db_url import connect
import pymysql
# db = connect(host='127.0.0.1', port=3306, user='root', password='fakepassword')
# db = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='fakepassword')
try:
db = connect('sqlite:///root:fakepassword@/DATABASE?unix_socket=/cloudsql/austinbakkerblog:us-west1:database')
except Exception:
print('did not connect to database')
# 'mysql+mysqldb://%s:%s@/blog?unix_socket=/cloudsql/%s'
app = Flask(__name__)
app.config.from_pyfile('config.py', silent=False)
DEBUG = app.debug
# db = MySQLDatabase('database')
# db.connect()
# db = connect('mysql://root:[email protected]:3306/database')
# db = connect('mysql://root:fakepassword@/DATABASE?unix_socket=/cloudsql/austinbakkerblog:us-west1:database')
# db = connect('mysql://root:fakepassword@/cloudsql/austinbakkerblog:us-west1:database')
# db = connect('mysql://root:fakepassword@cloudsql/austinbakkerblog:us-west1:database')
# print(db.connect())
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)
import models
from views import *
if __name__ == '__main__':
models.initialize()
print('=' * 100)
app.run()
Если кто-то готов помочь, это было бы потрясающе, я трачу последний день, пытаясь заставить это работать, но безуспешно.
Я попробовал оба варианта, но не смог заставить их работать. Мне было интересно, есть ли у вас пример с малышкой, или вы могли бы помочь мне его сформулировать, потому что у меня ничего не получается. @oakinlaja
db = MySQLDatabase('database', user='root', password='##############', host='35.233.225.232', port=3306) Я могу использовать это для подключения, но затем мне нужно внести экземпляр в белый список. Я, но это означает, что мое приложение не будет хорошо масштабироваться





Вместо того, чтобы использовать URL-адрес подключения, отладку может быть проще, если вы просто настроите соединение с базой данных напрямую.
Например,
db = MySQLDatabase('db_name', user='root', password='dbpassword',
host='googlecloud.whatever.com', port=31337)
Можно заставить pymysql подключиться?
если бы я сделал это, мне все равно пришлось бы занести в белый список IP-адрес, с которого он исходит, не так ли?
db = MySQLDatabase('database', user='root', password='##############', host='35.233.225.232', port=3306) Я заставил это работать. Но проблема не в том, что мне нужно заносить в белый список каждый экземпляр на моем sql.
Предположительно, вам придется занести их в белый список независимо от того, какую клиентскую библиотеку вы используете? то есть соединение - это соединение, будь то peewee, sqlalchemy, jdbc ...?
В облачном сервисе Google все движки приложений Google имеют доступ к нему без добавления в белый список. Итак, если я уверен, что IP-адрес, я перенаправляю соединение, пока это не нужно.
Итак, после нескольких дней измельчения я заставил его работать. Не уверен, как именно, но это
app.yaml
works. runtime: python
env: flex
entrypoint: gunicorn -b :$PORT app:app
runtime_config:
python_version: 3
env_variables:
SQL_USER: root
SQL_PASSWORD: test
SQL_DATABASE: database
INSTANCE_CONNECTION_NAME: austinbakkerblog:europe-west2:mydatabase1
beta_settings:
cloud_sql_instances: "austinbakkerblog:europe-west2:mydatabase1"
automatic_scaling:
min_num_instances: 1
max_num_instances: 2
cpu_utilization:
target_utilization: 0.5
app.py
"""Main script for the blog's website."""
from flask import Flask
from peewee import *
from livereload import Server, shell
from flask_uploads import UploadSet, IMAGES, configure_uploads
from flask_login import LoginManager, login_user
from jinja2 import Environment
import os
import pymysql
db = MySQLDatabase(host='127.0.0.1', user='root', password='test', unix_socket='/cloudsql/austinbakkerblog:europe-west2:mydatabase1', database='database')
print(db.connect())
print(db.close())
Рад слышать, что ты разблокирован.
Не совсем понятно, о чем ваша установка, но я предполагаю, что вы пытаетесь установить соединение между вашим экземпляром App Engine и экземпляром CloudSQL. Есть несколько способов реализовать такие соединения, включая использование Сервисный аккаунт или использование Прокси-сервер Cloud SQL. Вы пробовали эти методы?