【发布时间】:2014-11-23 23:30:03
【问题描述】:
我的目标是让我的 Flask 应用根据子域切换数据库。
subdomain dispatcher described in the docs 很有用,我正在使用something based off it
一切似乎工作正常,但在给定时间似乎只有 2 个实例工作,尽管 SubDomainDispatcher 加载了多个实例。其他实例发出 404。
我的create_app函数如下:
def create_app(subdomain):
app = Flask("proj", static_folder="../static", template_folder="../templates")
with app.app_context():
app.config.from_object('proj.config')
app.config.update(
SQLALCHEMY_DATABASE_URI = 'mysql://root:password@localhost:3306/' + subdomain + '_proj',
HOST = subdomain + app.config["HOST"],
)
from proj.models import db, Models
engine = sqlalchemy.create_engine("mysql://root:passwordT@localhost:3306")
engine.execute("CREATE DATABASE IF NOT EXISTS "+subdomain+"_proj")
engine.execute("use "+subdomain+"_proj")
db.init_app(app)
db.create_all()
mail = Mail(app)
store = DictStore()
KVSessionExtension(store, app)
import proj.views
return app
我正在使用带有 mod_wsgi 的 Apache:
Apache 配置
<VirtualHost *:80>
ServerName mywebsite.com
ServerAdmin admin@mywebsite.com
WSGIScriptAlias / /var/www/proj/app.wsgi
WSGIDaemonProcess application user=www-data group=www-data processes=5 threads=20
<Directory /var/www/proj/proj/>
Order allow,deny
Allow from all
</Directory>
#Alias /static /var/www/FlaskApp/FlaskApp/static
#<Directory /var/www/FlaskApp/FlaskApp/static/>
# Order allow,deny
# Allow from all
#</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
wsgi 文件
import sys
sys.path.insert(0, '/var/www/proj')
from subdomain import SubdomainDispatcher
from proj import create_app
application = SubdomainDispatcher(create_app)
似乎是某种竞争条件,但我不知道它会发生在哪里或为什么会发生。我尝试将进程和线程的数量减少到每个 1,但也没有看到工作。
非常感谢任何建议,因为我已经为此苦苦挣扎了一段时间。
【问题讨论】: