JRubyじゃないよ
Digdagのコードを追っていくとRbOperatorFactory.RbOperator#runTask()でRubyスクリプトを実行しています.
具体的にはProcessBuilderを使っています.
システムの環境変数を見てrubyコマンドを実行しています.
Tokyo Ruby会議#11 ワークフローエンジンDigdagのまとめ - Qiitaのビデオを見たときRuby使えると聞いて勝手にJRubyだろうなとか思ってました.
Digdagのワークフローの仕組み
-
digdag push
をすると - アーカイブが作成されてそれがDigdag serverに送られる
- ワークフローを実行するとき
- テンポラリディレクトリに展開される
- ワークフロー実行されます
Bundlerを使う
では本題のBundlerを使う方法です.
Digdagの仕組みをある程度知った上でBundlerを使う方法は幾つかあると思います.
bundler/inlineを使用する
- Bundlerが入っている場合
以下のような感じでスクリプト内にGemfile
相当のものが書けます.
調べた限りではGemfile.lock
相当はありませんでした.
#!/usr/bin/env ruby
require 'bundler/inline'
# 第1引数をtrueとするとbundle install相当をしてくれます.
gemfile(true) do
source 'https://rubygems.org'
gem 'json', require: false
gem 'nap', require: 'rest'
gem 'cocoapods', '~> 0.34.1'
end
pathオプションを使用する
- Bundlerが入っている場合
- プロジェクト内にライブラリを入れる
bundle install --path vendor/bundler
standaloneオプションを使用する
- Bundlerが入っていない場合
- スタンドアロンのオプションを有効にする.
bundle install --standalone
- Rubyスクリプトに
require
を追記require './bundle/bundler/setup'
path
とstandalone
は、ワークフローのアーカイブに含まれるので色々依存しすぎると、アーカイブでディスクを圧迫したり、展開に時間がかかったりするのでほどほどにしましょう.