capistrano/wheneverで cannot load such fileがでる
wheneverを導入するためCapfile
に require "whenever/capistrano"
と定義して bundle exec cap -T
とすると以下のエラーがでた。
1 | LoadError: cannot load such file -- /Users app bundle2.2.0 whenever-0.9.5 whenever whenever.rake |
実際にvendor/bundle/ruby/2.2.0/gems/whenever-0.9.5/lib/whenever/tasks/whenever.rake
を確認してみると、たしかにそのファイルが存在しない。
wheneverのリポジトリを見てみると、シンボリックリンクがはってあった。
bundle install
したときにはシンボリックリンクがはられないようだ。
手元のRubyのバージョンは、2.2.4だった。
ruby2.3.1で実行してみると Gem::Package::PathError
が発生した。
1 | ERROR: While executing gem ... (Gem::Package::PathError) |
このエラーはRuby2.3.2では直っていることが期待される。
回避策
Capfileでの指定はやめて、lib/capistrano/tasks
以下にwhenever.taskを作成した。
これでcapのタスク自体は実行できるようになった。
しかし、ruby2.3.1の環境ではbundle installがこけるのでwheneverの導入自体ができないという状況。
その後
bundle installがこけるバグは以下のPRがでており0.9.6で修正されていた。
また、0.9.5では cap whenever:update_crontab
で instance variable @_env not defined
が発生してコマンドが正常に実行できないバグがあったが、0.9.7で修正されている。
実はこのバグは自分が踏んでおり、その修正案をPRしてCHANGELOGに名前が刻まれた。