气流:未设置SQLALCHEMY_DATABASE_URI或SQLALCHEMY_BINDS

时间:2019-01-11 06:29:41

标签: airflow airflow-scheduler

我已经在本地Mac上设置了airflow 2.0,并以PostgresSQL作为sql_alchemy_conn的支持。我的DAG运行良好,并在sqla数据库中维护了元数据,但是任何气流用户都命令错误,并且角色表/视图未创建。

我尝试设置和重置气流resetdb,但是这些表在sql_alchemy_conn DB中仍然不可用。

modify permissions
psycopg2.ProgrammingError: relation "ab_permission_view_role" does not exist
LINE 2: FROM ab_permission_view_role JOIN ab_permission_view ON ab_p...

我希望这些表应该在后端的某个地方创建。我想使用气流用户命令通过脚本自动创建用户,但是由于存在现有错误,上帝保佑我:)

4 个答案:

答案 0 :(得分:8)

我得到了这个解决方案。发生这种情况是因为未在ab_* tables上创建airflow initdb。所有这些表都用于基于角色的访问控制– RBAC

要拥有这些表,请按照说明进行操作:

  1. 编辑airflow.cfg
[webserver]
rbac = True
  1. 运行airflow initdb以创建这些丢失的表。

这解决了我的问题。

答案 1 :(得分:1)

在气流1.10.12中最常见的原因是添加一个覆盖默认设置的$AIRFLOW_HOME/webserver_config.py文件。

如果要添加webserver_config.py,则必须包含

SQLALCHEMY_DATABASE_URI = conf.get('core', 'SQL_ALCHEMY_CONN')

就像在default webserver_config.py中一样。

原则上,如果您在rbac = True中设置airflow.cfg,删除webserver_config.py并执行诸如airflow list_users之类的命令,那么气流将为您创建一个webserver_config.py文件您以后可以修改的正确的SQLALCHEMY_DATABASE_URI = ...

答案 2 :(得分:0)

您可以在气流源代码中修补app.py

在数据库初始化SQLALCHEMY_DATABASE_URI之前,从SQL_ALCHEMY_CONN在app.config中设置db = SQLA(app)

这是app.py文件的路径:

/Users/deepaksaroha/Desktop/apache_2.0/nb-atom-airflow/lib/python3.7/site-packages/airflow/www_rbac/app.py

这是您应该包括的行:

app.config['SQLALCHEMY_DATABASE_URI'] = conf.get('core', 'SQL_ALCHEMY_CONN')

答案 3 :(得分:0)

@appleboy选择的答案对我不起作用,但@Nando_Quintana的解决方案却没有。

执行以下操作以将其修补程序应用为补丁

cd path/to/python/site-packages/airflow/www_rbac/
patch <<EOF
--- _app.py2019-09-25 17:18:59.127378849 +0000
+++ app.py 2019-09-25 17:18:53.467413221 +0000
@@ -53,6 +53,7 @@
     app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
     app.config['APP_NAME'] = app_name
     app.config['TESTING'] = testing
+    app.config['SQLALCHEMY_DATABASE_URI'] = conf.get('core', 'SQL_ALCHEMY_CONN')

     csrf.init_app(app)
EOF

在Python 3.6.8和Airflow 1.10.2上进行了测试