質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

Wheneverとcronを使用した時にbundlerがおかしくなる

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 1,759

score 8

前提・実現したいこと

【バージョン】
・macOS Catalina 10.15.3
・ruby : 2.6.5p114
・rails : 5.1.7
・bundler : 2.1.4
・zsh

wheneverとcronを使用した際に定期実行はされているが、下記エラーの為正しく処理ができず詰まっております。
下記エラーの解消方法や関連エラーについて知見ございましたらご教示いただきたいです。

発生している問題・エラーメッセージ

/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:283:in `find_spec_for_exe': Could not find 'bundler' (2.1.4) required by your /Users/my_name/develop/app_name/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:2.1.4`
    from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems.rb:302:in `activate_bin_path'
    from /usr/bin/bundle:23:in `<main>'

該当のソースコード

% which bundler
/Users/my_name/.rbenv/shims/bundler

% which ruby
/Users/my_name/.rbenv/shims/ruby
#Gemfile.lock

BUNDLED WITH
   2.1.4

追記事項

#crontab -l
SHELL=/usr/local/bin/zsh

# Begin Whenever generated tasks for: /Users/my_name/develop/app_name/config/schedule.rb at: 2020-03-30 07:49:19 +0900
PATH=/Users/my_name/develop/app_name/vendor/bundle/ruby/2.6.0/bin:/Users/my_name/.rbenv/versions/2.6.5/bin:/usr/local/Cellar/rbenv/1.1.2/libexec:/Users/my_name/.rbenv/shims:/usr/local/opt/libxml2/bin:/usr/local/bin:/Users/my_name/.pyenv/shims:/Users/my_name/.zplug/bin:/usr/bin:/bin:/usr/sbin:/sbin

* * * * * source $HOME/.zshrc; $(which zsh) -l -c 'cd /Users/my_name/develop/app_name && RAILS_ENV=development bundle exec rake tweet:text --silent >> /Users/my_name/develop/app_name/log/cron.log 2>&1'

# End Whenever generated tasks for: /Users/my_name/develop/app_name/config/schedule.rb at: 2020-03-30 07:49:19 +0900
#/config/schedule.rb

require File.expand_path(File.dirname(__FILE__) + "/environment")

set :environment, Rails.env.to_sym
env :PATH, ENV['PATH']
set :output, "#{Rails.root.to_s}/log/cron.log"
set :job_template, "source $HOME/.zshrc; $(which zsh) -l -c ':job'"
job_type :runner, "cd :path && bundle exec rails runner -e :environment ':task' :output"

every 1.minute do
  rake "tweet:text"
end
#/tasks/tweet.rake
namespace :tweet do

  desc "テスト..."
  task :text => :environment do
    logger = Logger.new 'log/test.log'
    p "ここまでOK"
  end

end

試したこと

gem install bundler:2.1.4
bundle update --bundler
rubyの再インストール
bundlerの再インストール...etc

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

+2

#/config/schedule.rb
set :job_template, "/bin/zsh -l -c ':job'"
job_type :rake, "export PATH=\"$HOME/.rbenv/bin:$PATH\"; eval \"$(rbenv init -)\"; cd :path && RAILS_ENV=:environment bundle exec rake :task :output"


schedule.rb内でrbenvを初期化することで解決しました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

cron や whenever から bundle などを実行する際に、rbenv の設定が効いてないと思われます。
参考: rbenv 管理下のruby script をcron から実行する (備忘録) - Qiita
参考: zsh+rbenv+crontab @wheneverで「no such file to load -- bundler/setup (LoadError)」等のエラー回避法 - Qiita


source $HOME/.zshrc; は zsh -c の引数の中に書く必要がある気がします。

* * * * * $(which zsh) -l -c 'source $HOME/.zshrc; cd /Users/my_name/develop/app_name && RAILS_ENV=development bundle exec rake tweet:text --silent >> /Users/my_name/develop/app_name/log/cron.log 2>&1'
set :job_template, "$(which zsh) -l -c 'source $HOME/.zshrc; :job'"

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/30 09:36

    もしかして、bundle exec に --silent を指定すると何も出力しないのでは。

    キャンセル

  • 2020/03/30 10:11

    --silentの記述を消しましたがzshではログが出力されませんでした

    キャンセル

  • 2020/03/30 13:30

    set :job_template, "/bin/zsh -l -c ':job'"に変更したらzshでもログ出力はできました。
    rbenvの設定が効かない問題については継続して検証中です。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る