LoginSignup
0
1

More than 1 year has passed since last update.

ckanバックエンド側テスト環境構築時に発生したエラーまとめ

Last updated at Posted at 2021-07-09

ckanのプラグインの開発時、バックエンドのテスト実行時にエラーになった個所について記載します。

環境

Windows上でDockerのコンテナ上にckanを構築しています。

ソフトウェアなど バージョン
Windows 10
Docker v20.10.7
Docker Compose v2.0.0-beta.4
Debian GNU/Linux v9
python v2.7.13
pytest v4.6.5
ckan v2.9.3
PostgreSQL v11.2
Solr v6.6.5
Redis v6.2.4

発生したエラー

設定ファイル(who.ini)読み込み時にエラーになる

エラー内容

INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "/usr/lib/ckan/venv/local/lib/python2.7/site-packages/_pytest/main.py", line 204, in wrap_session
...(略)...
INTERNALERROR> MissingSectionHeaderError: File contains no section headers.
INTERNALERROR> file: /usr/lib/ckan/venv/src/ckan/who.ini, line: 1
INTERNALERROR> 'ckan/config/who.ini'

原因

Linuxのシムリンクのwho.iniがWindows上でサポートされないためです。

解決方法

シムリンク先のwho.iniを直接参照するようにテスト用設定ファイルを修正します。

{プラグインのルートディレクトリ}/test.ini
who.config_file = {who.iniのリンク先}

who.iniのリンク先の確認方法

ckanのGitHub上から確認し、リンク先のパスを探してください。

参考

DBの操作を行う実装個所でエラーになる

テスト用DBのクリーンを行うために以下のようなテストコードを実装しました。

@pytest.mark.usefixtures('clean_db')
def test_plugin():
    pass

エラー内容

self = <sqlalchemy.dialects.postgresql.psycopg2.PGDialect_psycopg2 object at 0x7f3e6e7cb7d0>, cursor = <cursor object at 0x7f3e6e7bac50; closed: -1>, statement = '\nDROP TABLE spatial_ref_sys', parameters = {}                                                                                                                                                                                                   rs = {}
context = <sqlalchemy.dialects.postgresql.psycopg2.PGExecutionContext_psycopg2 object at 0x7f3e6af4bdd0>

    def do_execute(self, cursor, statement, parameters, context=None):
>       cursor.execute(statement, parameters)
E       InternalError: (psycopg2.errors.DependentObjectsStillExist) cannot drop table spatial_ref_sys because extension postgis requires it
E       HINT:  You can drop extension postgis instead.
E
E       [SQL:
E       DROP TABLE spatial_ref_sys]
E       (Background on this error at: http://sqlalche.me/e/2j85)

../../local/lib/python2.7/site-packages/sqlalchemy/engine/default.py:550: InternalError

原因

テスト用DBが初期化されていない可能性があります(参照しているDB情報が異なる)。

解決方法

ckanをホストするサーバーのシェルスクリプトで以下を実行します。

CKAN_SQLALCHEMY_URL={テスト用DBの接続情報}
# 例としてプラグイン「sample」のテストを行う
cd /usr/lib/ckan/venv/src/ckanext-sample
# テスト実行
pytest --ckan-ini={テスト用の設定ファイル} ckanext/sample/tests

解説

大切な個所は以下1点です。PostgresSQLの拡張機能「Postgis」は関係ありません。

  1. CKAN_SQLALCHEMY_URL={テスト用DBの接続情報}

    環境変数「CKAN_SQLALCHEMY_URL」を使用していなければ、設定ファイル内のDB情報が正しく参照されるためエラーは発生しません。もし環境変数「CKAN_SQLALCHEMY_URL」にすでに本番用DBの接続情報が設定されている場合、テスト用の設定ファイルにsqlalchemy.urlを指定していても環境変数側の値が優先されます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1