2016-10-27 4 views
0

Я запускаю приложение фляги python(3.4) на awas beanstalk. Когда я вхожу в оболочку ec2 и пытаюсь запустить приложение flask локально, он работает правильно и легко извлекает данные с удаленного cassandra. Но, получая данные от cassandra, приложение, выполняемое AWS eb, продолжает бросать следующие ошибки в httpd/error_log.Приложение с флягой, работающим в AWS beanstalk, не может подключиться к удаленной cassandra

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)[[email protected] ~]$ 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 

С уважением

ответ

0

Вы не настроить подключение к Кассандре первым. Вам нужно сделать это, прежде чем вы сможете выполнять запросы против него.

+0

На самом деле я делаю это в основной функции моего приложения, если __name__ == "__main__": connection.setup ([config.CASSANDRA_CLUSTER_IP], config.CONST_KEYSPACE, protocol_version = 3) os.environ [ "CQLENG_ALLOW_SCHEMA_MANAGEMENT"] = " Да " sync_table (mytable) – VaibhavJain

+0

Является ли env var set? –

+0

Плохо. Я установил соединение с помощью функции __main__. Конфигурация AWS для Elastic Beanstalk настраивает среду WSGI (это Apache + WSGI в бэкэнд). Когда он запускался в среде EB, основная функция вызывалась. Я переместил код подключения вне основной функции и начал работать. – VaibhavJain