LoginSignup
0
0

More than 1 year has passed since last update.

CKAN Extension開発でハマった3選!

Posted at

CKAN Extension開発

どうも皆様、こんにちは!
オープンデータを公開するために使われているCKAN
この拡張機能(Extension)の開発に参加いたしました!
公式のドキュメントのみではハマることがあったので、記事にまとめておきます。

CKAN環境の構築

docker composeでCKANをインストールし、進めていきます!
インストール方法については前回の記事をご覧ください。

ハマりポイント① cookiecutter

CKAN公式がExtension開発のためのチュートリアルを作成してくれています。

ここでハマったポイントが1つ😥

extensionのディレクトリを作成するために以下のコードを打つ必要があるとの記述があります

cookiecutter ckan/contrib/cookiecutter/ckan_extension/

実際に打ってみると...

ERROR: Stopping generation because post_gen_project hook script didn't exit successfully

エラー文を検索すると以下のissueに辿り着きますが...
CKANのコンテナ内で色々と設定をするのは面倒に感じます。😅

しかし、同様のことができるコードが実はすぐ下にあります!

ckan --config=/etc/ckan/production.ini generate extension

こちらのコードであれば特にエラーも発生せずに実行が出来ました!
usr/lib/ckan/venv/src下に設定した名前のディレクトリが作成されているはずです。

--configオプションのパスについては環境によって異なる可能性があります。

ここを突破しないと次にいけないと思い、そこそこ時間を使いました😂

ハマりポイント② 言語対応

これは軽めのハマりでした!

多言語(日本語など)に対応するには以下のチュートリアルを理解し、進める必要があります。

ざっくりした流れで言うと以下の通りです。
templateの作成→.potの生成→.poの生成と編集→.moの生成

この.poを作成する際に少しハマりました😅
以下のコマンドで.poファイルを生成するのですが、上手く.poが生成されませんでした。

python setup.py init_catalog --locale ja

理由としては「日本語に複数形がない」ということでした。
そうした理由から以下のコードに修正が必要でした。

#: ckanext/feedback/templates/header.html:23
#, python-format
msgid "Dashboard (%(num)d new item)"
msgid_plural "Dashboard (%(num)d new items)"
msgstr[0] ""
msgstr[1] ""

このmsgstr[1]を削除することで問題なく.poを生成することが出来ました。

ハマりポイント③ テスト

一番ハマったポイントと言っても過言ではないです!

まずは以下のドキュメントを進め、テストの下準備をします

テスト用DBの作成

ここで以下のコードを実行し、テスト用のDBを構築するのですが...

sudo -u postgres createdb -O ckan_default ckan_test -E utf-8
sudo -u postgres createdb -O ckan_default datastore_test -E utf-8

このコードを実行する前の処理がだいぶ端折られています。

  1. DBのコンテナに移動する(dockerでの構築だからかもしれません)
    docker exec -it --user root db /bin/bash
  2. sudo コマンドをインストールする
    apt-get update
    apt-get install sudo
  3. postgresのロールを作成する
    CREATE ROLE postgres WITH LOGIN PASWORD 'pass' SUPERUSER;
  4. ckan_defaultのロールを作成する
    CREATE ROLE ckan_default WITH LOGIN PASWORD 'pass' SUPERUSER;

これらの手順を行うことで公式ドキュメントのコマンドを実行できます。

その他の手順を行い、ようやくExtensionのテストのドキュメントを行います!

test.iniの場所

テストを記述し、公式通りに進めていくと以下のコードを実行するとエラーが起きます

pytest --ckan-ini=test.ini ckanext/iauthfunctions/tests

まずExtensionの配置されるディレクトリがインストール方法によって少し変わります。

  • pip installを使う場合
    /usr/lib/ckan/venv/lib/pythonX.X/site-packages/

    • 公式通りにtest.iniを配置しているとコンテナ内に取り込まれません
    • ckanext以下のどこかに配置しましょう
  • Githubから直接インストールする場合
    /usr/lib/ckan/venv/src/

ですので、--ckan-iniオプションの指定するパスが変わってきます

テスト用DBの指定

さて、実行していきます!
しかし、テストファイルのclean_dbでの初期化が上手くいきません😥

これはtest.inisqlalchemy.urlで指定したDBがテスト実行時に上書きされているからだそうです。(自分では見つけられませんでした泣)

ですので、コマンドの前に

CKAN_SQLALCHEMY_URL= CKAN_DATASTORE_READ_URL= CKAN_DATASTORE_WRITE_URL= 

をおいてあげる必要があるそうです。

まとめ

以上が私がCKAN Extension開発を行っていて特に記憶に残っているハマりポイントです!

ハマりポイントを自力で脱出できるように、
初歩的なところではハマらないように精進していきます。

今回の記事が皆様のお役に立てれば幸いです。

0
0
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
0