ローカルgemファイル(自作プラグイン等)を含まない場合はbundle機能を使うのが正式かと思う
$ embulk --version
embulk 0.8.16
$ digdag version
2017-02-15 11:11:19 +0900: Digdag v0.9.4
Client version: 0.9.4
Server version: 0.9.4
$ cd digdagtest1
$ mkdir embulk_bundle
$ vi embulk_bundle/Gemfile
$ cat embulk_bundle/Gemfile
source 'https://rubygems.org/'
gem 'embulk-input-td', '= 0.1.0' # 範囲指定も出来る
gem 'embulk-output-td', '= 0.3.12'
$ cat embulk_gem_install.sh
mkdir -p /digsv_nfs/embulk_bundle/digdagtest1
cp -r embulk_bundle/Gemfile /digsv_nfs/embulk_bundle/digdagtest1
cd /digsv_nfs/embulk_bundle/digdagtest1
/usr/local/bin/embulk bundle --path .
$ cat a.dig
+embulk_gem_install:
sh>: embulk_gem_install.sh
+task1:
sh>: /usr/local/bin/embulk run --bundle /digsv_nfs/embulk_bundle/digdagtest1 task1.yml.liquid
以上をDigdagサーバにpushして実行すると
Digdagサーバ間で共有しているNFSディレクトリにEmbulkプラグインをインストールする
(同じDigdagサーバにpushされた他プロジェクトとGemfileを上書きし合わないようにプロジェクト名のサブディレクトリを切っている)
実行の度にembulk bundleが実行されるが許容する
NFSディレクトリにインストールする理由
複数サーバでプラグインを共有するため
embulk bundleが1号機で実行されてembulk runが2号機で実行されても大丈夫 → NFSの必要性の理由1
サーバが1台ならホームディレクトリにインストールしても良い(bundle時の--pathを取る)
その場合、複数プロジェクトから同一プラグインの同一バージョンは共用される
また、複数プロジェクトから同一プラグインのバージョン違いがインストールされても自プロジェクトのGemfileに記載されたバージョンが使用される
pushサイズ制限
クライアントでdigdagプロジェクトディレクトリ内にインストールしてからpushすることも試したが、プラグイン数が多い(7個とか)場合にpushサイズ制限にひっかかった
error: Status code 400: {"message":"Size of the uploaded archive file exceeds limit (2097152 bytes)","status":400}
$ du -sh embulk_bundle
21M embulk_bundle/
事前インストール
dig内でembulk bundleしてるが、Digdagサーバに入る権限があれば事前にDigdagサーバ上でembulk bundleしておけば良い
各サーバ上で作業すればNFSディレクトリにインストールする必要もない(ホームディレクトリとか)
ローカルgemがある場合
別記事にて