PerlerのRuby日記

Rubyとか

gemが突然見えなくなった

今日突然Jenkinsのあるジョブがエラーになってしまった。

↓失敗してたジョブのコンソール表示

[error]: Missing 'redcarpet' gem for Markdown formatting. Install it with `gem install redcarpet`

でもその直前にbundle installはしていて、そこにちゃんとredcarpetも入っている。

Using redcarpet (2.3.0) 

一応、Jenkinsのworkspaceに直接入って同じコマンドを叩いてみたけれど、エラーになった。
ただちょっとメッセージが違った。

dlopen(…/workspace/vendor/bundle/ruby/1.9.1/gems/redcarpet-2.3.0/lib/redcarpet.bundle, 9): Library not loaded: …/ruby/lib/libruby.1.9.1.dylib
  Referenced from: …/workspace/vendor/bundle/ruby/1.9.1/gems/redcarpet-2.3.0/lib/redcarpet.bundle
  Reason: image not found - …/workspace/vendor/bundle/ruby/1.9.1/gems/redcarpet-2.3.0/lib/redcarpet.bundle


何かしたっけ……と思い返したところ、homebrew経由でhttpdを入れていた。

それだけでなんで失敗このジョブが失敗することにつながったのかはいまひとつ分からないけれど、
エラーメッセージでググったら同じようなひとがいて、
メッセージの見たままdylibが読めないだけだから、シンボリックリンク張ったりPATH変更したりでなんとかなるみたいだった。

gemを入れ直しても解決するようだったので、ローカルにインストールしてたvendor/bundleを一回消して、もう一回bundle installしたらJenkinsのジョブの方もちゃんと動いた。
よかった。

ensureはループ処理内でも動く

メモ。ensureはちゃんとnextとかbreakも捕捉してくれる。さすがensure。

%w[ normal raise next break ].each do |w|
  puts "==============================="
  puts "w: #{w}"
  begin
    raise if w == "raise"
    next  if w == "next"
    break if w == "break"
  rescue
    puts "raise"
  else
    puts "else"
  ensure
    puts "ensure"
  end
end
===============================
w: normal
else
ensure
===============================
w: raise
raise
ensure
===============================
w: next
ensure
===============================
w: break
ensure