在OpenShift上使用SQLAlchemy创建数据库

0 投票
1 回答
685 浏览
提问于 2025-04-17 21:28

我刚把我的应用程序部署到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']

撰写回答