DataPusher
功能簡介
- 自動上傳資料內容至 DataStore 資料庫。
- 可自資料編輯頁面之「DataStore」頁籤確認上傳狀態或手動上傳資料至 DataStore 資料庫。
系統需求
- CKAN (>=2.1)
- PostgreSQL (>=9.0)
註解 |
---|
若依照本文件的教學安裝 CKAN,你應該已經滿足所有套件需求 |
安裝
安裝必須套件:
$ sudo apt-get install python-dev python-virtualenv build-essential libxslt1-dev libxml2-dev git
新增一個虛擬環境供 DataPusher 使用:
$ sudo mkdir -p /usr/lib/ckan/datapusher $ sudo chown `whoami` /usr/lib/ckan/datapusher $ virtualenv --no-site-packages /usr/lib/ckan/datapusher
進入剛才新增的虛擬環境:
$ . /usr/lib/ckan/datapusher/bin/activate
自 github ckeckout source 並安裝:
$ mkdir /usr/lib/ckan/datapusher/src $ cd /usr/lib/ckan/datapusher/src $ git clone https://github.com/ckan/datapusher.git $ cd /usr/lib/ckan/datapusher/src/datapusher (pyenv) $ pip install -e .
安裝所需 Python 套件:
(pyenv) $ pip install -r requirements.txt
執行 DataPusher:
(pyenv) $ JOB_CONFIG='/usr/lib/ckan/datapusher/src/datapusher/deployment/datapusher_settings.py' python wsgi.py
測試 DataPusher,可在瀏覽器輸入 http://127.0.0.1:8800
啟用 DataPusher CKAN 外掛: 修改 CKAN 設定檔(一般位於 /etc/ckan/default/),在 ckan.plugins 最後加上:
ckan.plugins = datapusher
重新啟動 CKAN
佈署
DataPusher 的 Production 安裝與 CKAN 類似,使用 nginx + uwsgi 的方式。
註解 |
---|
本教學部份內容係參考 How To Set Up uWSGI and Nginx to Serve Python Apps on Ubuntu 14.04 (DigitalOcean) 與 Serving Flask With Nginx (Vladik Khononov) |
安裝 uwsgi:
(pyenv) $ pip install uwsgi
修改 wsgi.py: 為配合 uwsgi,我們需要將 wsgi.py 做小修改。
開啟 /usr/lib/ckan/datapusher/src/datapusher/wsgi.py,修改如下:import ckanserviceprovider.web as web import datapusher.jobs as jobs import os # check whether jobs have been imported properly assert(jobs.push_to_datastore) os.environ['JOB_CONFIG'] = '/usr/lib/ckan/datapusher/src/datapusher/deployment/datapusher_settings.py' web.init() web.app.run(web.app.config.get('HOST'), web.app.config.get('PORT'))
建立 uwsgi 設定檔: 創建 log 檔案
$ mkdir /etc/ckan/default/log $ touch /etc/ckan/default/log/datapusher.log
新增 /etc/ckan/default/datapusher.ini,內容如下:
[uwsgi] wsgi-file = /usr/lib/ckan/datapusher/src/datapusher/wsgi.py socket = /tmp/datapusher.sock master = true processes = 1 chmod-socket = 664 vacuum = true die-on-term = true logto = /etc/ckan/default/log/datapusher.log
建立 Upstart 檔案:
$ sudo vi /etc/init/datapusher.conf
在開啟的 vi 編輯器中,輸入以下內容:
description "uWSGI instance to serve DataPusher" start on runlevel [2345] stop on runlevel [!2345] setuid (填入 /usr/lib/ckan/datapusher 目錄的擁有者) setgid www-data script cd /etc/ckan/default . /usr/lib/ckan/datapusher/bin/activate uwsgi --ini /etc/ckan/default/datapusher.ini end script
之後便可使用以下指令啟動 DataPusher:
$ sudo start datapusher
你可以使用以下指令確認 DataPusher 是否正常運作:
$ ps aux | grep datapusher
你應該可以看到類似下面的輸出:
demo 1009 0.0 0.2 266332 37512 ? Sl Sep14 2:49 uwsgi --ini /etc/ckan/default/datapusher.ini
註解 |
---|
目前此佈署方法無法使用 sudo stop datapusher 的方式停止 DataPusher,請直接使用 kill 指令。 |
修改 CKAN 設定檔(一般位於 /etc/ckan/default/),修改 ckan.datapusher.url 為:
ckan.datapusher.url = http://0.0.0.0:8800/
重新啟動 CKAN
問題排除
- 若是於資料上傳時出現下列錯誤
錯誤: Process completed but unable to post to result_url
則需要確認 ckan 設定檔中 的 ckan.site_url 設定為正確,因大多數的 CKAN Server 以 VM 方式建立,若有 URI ,則應以 URI 設置,而非 IP 位置 (尤其在以 NAT 建立的虛擬機上更應如此),如下範例;
ckan.site_url = http://xyz.cloudapp.net/