在OpenShift上使用SQLAlchemy创建数据库
我刚把我的应用程序部署到openshift上,但运行时出现了500错误。查看日志文件后,我发现sqlalchemy找不到数据库。
python/logs/error_log-20140308-000000-EST <==
[Sat Mar 08 17:47:31 2014] [error] [client 127.10.252.129] reraise(type(exception), exception, tb=exc_tb)
[Sat Mar 08 17:47:31 2014] [error] [client 127.10.252.129] File "/var/lib/openshift/531b3df4500446dfb400007a/python/virtenv/lib/python2.7/site-packages/SQLAlchemy-0.8.4-py2.7-linux-x86_64.egg/sqlalchemy/engine/base.py", line 867, in _execute_context
[Sat Mar 08 17:47:31 2014] [error] [client 127.10.252.129] context)
[Sat Mar 08 17:47:31 2014] [error] [client 127.10.252.129] File "/var/lib/openshift/531b3df4500446dfb400007a/python/virtenv/lib/python2.7/site-packages/SQLAlchemy-0.8.4-py2.7-linux-x86_64.egg/sqlalchemy/engine/default.py", line 324, in do_execute
[Sat Mar 08 17:47:31 2014] [error] [client 127.10.252.129] cursor.execute(statement, parameters)
[Sat Mar 08 17:47:31 2014] [error] [client 127.10.252.129] File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/MySQLdb/cursors.py", line 174, in execute
[Sat Mar 08 17:47:31 2014] [error] [client 127.10.252.129] self.errorhandler(self, exc, value)
[Sat Mar 08 17:47:31 2014] [error] [client 127.10.252.129] File "/opt/rh/python27/root/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
[Sat Mar 08 17:47:31 2014] [error] [client 127.10.252.129] raise errorclass, errorvalue
[Sat Mar 08 17:47:31 2014] [error] [client 127.10.252.129] OperationalError: (OperationalError) (1046, 'No database selected') 'DESCRIBE `users`' ()
我搞不清楚状况。openshift的文档说,当你创建一个应用时,会立即创建一个与应用同名的数据库。
1 个回答
1
这个关于OpenShift的Flask教程使用了PostgreSQL,并给出了连接字符串:
SQLALCHEMY_DATABASE_URI = os.environ['OPENSHIFT_POSTGRESQL_DB_URL']
我用了MySQL,所以把它改成了:
SQLALCHEMY_DATABASE_URI = os.environ['OPENSHIFT_MYSQL_DB_URL']
这就是导致错误的原因,因为你必须把应用的名字(也就是数据库的名字)传递给URI。所以连接字符串变成了:
SQLALCHEMY_DATABASE_URI = os.environ['OPENSHIFT_MYSQL_DB_URL'] + os.environ['OPENSHIFT_APP_NAME']