以前に書いた記事 の改良版
基本的な考え方
Embulkが提供しているbundle機能を使う
ローカルgem展開ディレクトリをGemfileの:pathで指定する
bundleディレクトリもローカルgem展開ディレクトリもサーバ間でNFS共有する → 理由
前準備
digdagサーバにpushするプロジェクトディレクトリ内にローカルgemを持っておく
[vagrant@digcl proj1]$ embulk --version
embulk 0.8.26
[vagrant@digcl proj1]$ digdag version
2017-07-10 11:27:57 +0900: Digdag v0.9.12
Client version: 0.9.12
Server version: 0.9.12
[vagrant@digcl proj1]$ ls -F
embulk/ embulk_local_gems/ params/ proj1.dig scripts/
[vagrant@digcl proj1]$ ls -F embulk_local_gems/
embulk-input-XXX-0.2.0.gem
各ファイルの内容
proj1.dig
+embulk_gem_install:
sh>: scripts/embulk_gem_install.sh
+task1:
sh>: scripts/embulk_run.sh embulk/task1.yml.liquid
scripts/embulk_gem_install.sh
#!/bin/bash
# エラー処理
function error() {
exit 1
}
# ローカルgemを展開
gem unpack embulk_local_gems/* --target=<NFS>/proj1/embulk_local_gems || error
# embulk mkbundle実行
if [ ! -e ${embulk_bundle_dir} ]; then
embulk mkbundle <NFS>/proj1/embulk_bundle || error
fi
# Gemfile上書き
cp -f params/embulk/Gemfile <NFS>/proj1/embulk_bundle || error
# embulk bundle実行
cd <NFS>/proj1/embulk_bundle || error
embulk bundle || error
exit 0
毎回やるのは無駄な内容ではあるが許容する
params/embulk/Gemfile
source 'https://rubygems.org/'
gem 'embulk', '~> 0.8.0'
gem 'embulk-output-td', '= 0.4.0'
gem 'embulk-input-XXX', '= 0.2.0', :path => '../embulk_local_gems/embulk-input-XXX-0.2.0'
ローカルgemは:pathで展開ディレクトリを指定(相対パス可)
展開ディレクトリの内容がbundleディレクトリにコピーされたりはしない(embulk run時に展開ディレクトリを参照する)
scripts/embulk_run.sh
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage: $0 embulk_file" 1>&2
exit 1
fi
embulk run --bundle <NFS>/proj1/embulk_bundle $1
exit $?
以上