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
配列の中にハッシュがひとつ
知らなかったのでメモ。
こう書くと
users = [ id: 123, name: "Yamada", age: 21, ]
こうなる。
p users
#=> [{:id=>123, :name=>"Yamada", :age=>21}]