【问题标题】:Flask app running in AWS beanstalk not able to connect to remote cassandra在 AWS beanstalk 中运行的 Flask 应用程序无法连接到远程 cassandra
【发布时间】:2017-03-09 16:55:21
【问题描述】:

我正在 aws beanstalk 上运行 python(3.4) flask 应用程序。当我登录到 ec2 shell 并尝试在本地运行烧瓶应用程序时,它可以正常运行并轻松地从远程 cassandra 获取数据。但是在从cassandra 获取数据时,AWS eb 运行的应用程序不断在 httpd/error_log 中抛出以下错误。

ERROR in app: Exception on /user/1003 [GET]
Traceback (most recent call last):
File "/opt/python/run/venv/lib/python3.4/site-packages/flask/app.py", line 1988, in wsgi_app
response = self.full_dispatch_request()
File "/opt/python/run/venv/lib/python3.4/site-packages/flask/app.py", line 1641, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/opt/python/run/venv/lib/python3.4/site-packages/flask/app.py", line 1544, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/opt/python/run/venv/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/opt/python/run/venv/lib/python3.4/site-packages/flask/app.py", line 1639, in full_dispatch_request
rv = self.dispatch_request()
File "/opt/python/run/venv/lib/python3.4/site-packages/flask/app.py", line 1625, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/opt/python/current/app/application.py", line 53, in user_profile
data = get_user_data(id)
File "/opt/python/current/app/application.py", line 163, in get_user_data
if obj:
File "/opt/python/run/venv/lib64/python3.4/site-packages/cassandra/cqlengine/query.py", line 393, in __le
n__
self._execute_query()
File "/opt/python/run/venv/lib64/python3.4/site-packages/cassandra/cqlengine/query.py", line 428, in _exe
cute_query
self._result_generator = (i for i in self._execute(self._select_query()))
File "/opt/python/run/venv/lib64/python3.4/site-packages/cassandra/cqlengine/query.py", line 360, in _exe
cute
result = _execute_statement(self.model, statement, self._consistency, self._timeout)
File "/opt/python/run/venv/lib64/python3.4/site-packages/cassandra/cqlengine/query.py", line 1412, in _ex
ecute_statement
parts = model._routing_key_from_values(key_values, connection.get_cluster().protocol_version)
File "/opt/python/run/venv/lib64/python3.4/site-packages/cassandra/cqlengine/connection.py", line 183, in
 get_cluster
raise CQLEngineException("%s.cluster is not configured. Call one of the setup or default functions firs
t." % __name__)
cassandra.cqlengine.CQLEngineException: cassandra.cqlengine.connection.cluster is not configured. Call one
of the setup or default functions first.

我的环境:

(venv)[ec2-user@ip-11.1.1.1 ~]$ pip freeze
cassandra-driver==3.6.0
click==6.6
Cython==0.24.1
Flask==0.11
itsdangerous==0.24
Jinja2==2.8
MarkupSafe==0.23
six==1.10.0
Werkzeug==0.11.11
xmltodict==0.10.2 

问候

【问题讨论】:

    标签: flask cassandra amazon-elastic-beanstalk datastax


    【解决方案1】:

    您没有先设置与 Cassandra 的连接。您需要先执行此操作,然后才能对其执行查询。

    【讨论】:

    • 实际上,如果 name == "main": connection.setup([config.CASSANDRA_CLUSTER_IP], config .CONST_KEYSPACE, protocol_version=3) os.environ["CQLENG_ALLOW_SCHEMA_MANAGEMENT"] = "Yes" sync_table(mytable)
    • 环境变量设置了吗?
    • 我的坏。我在 main 函数中设置了连接。 Elastic Beanstalk 的 AWS 配置配置了 WSGI 环境(后端是 Apache + WSGI)。当它在 EB 环境中运行时,主函数被调用。我将连接代码移到主函数之外,它开始工作了。
    猜你喜欢
    • 2015-01-03
    • 2021-08-03
    • 2020-07-27
    • 2019-07-11
    • 2018-07-09
    • 2018-06-21
    • 1970-01-01
    • 2018-11-09
    • 2015-08-16
    相关资源
    最近更新 更多