どうも中田です。
久々の投稿になります。
正確にはwheneverで登録したcronが動かないって話です。
発生したエラーはこんな感じ
bundler: failed to load command: bin/rails (bin/rails)
なんだか bin/rails
が見えてないっぽい。
解決方法
schedule.rbに環境変数を渡す記述を入れる
rails_env = ENV['RAILS_ENV'] ||= 'production' set :output, error: 'log/crontab_error.log', standard: 'log/crontab.log' set :environment, rails_env ENV.each { |k, v| env(k, v) } # これを追加 every 10.minute do runner 'Tasks::Test.execute' end
Dockerでcronを実行する場合、環境変数が引き継がれないようなので、
cronの中に環境変数を書いてしまおうというもの
crontab -l
で確認すると
# Begin Whenever generated tasks for: /test/config/schedule.rb at: 2018-07-07 00:28:14 +0000 RUBYGEMS_VERSION=2.7.7 BUNDLER_VERSION=1.16.2 RAILS_VERSION=5.2 ...(省略) BUNDLE_GEMFILE=/test/Gemfile RUBYOPT=-rbundler/setup RUBYLIB=/usr/local/lib/ruby/site_ruby/2.5.0 GEM_PATH="" * * * * * /bin/bash -l -c 'cd /test && bundle exec bin/rails runner -e local '\''Tasks::Test.execute'\'' >> log/crontab.log 2>> log/crontab_error.log' # End Whenever generated tasks for: /test/config/schedule.rb at: 2018-07-07 00:28:14 +0000
たしかにcrontabに入ってますね。
すると、うまく動きました。
[…] https://www.cotegg.com/blog/?p=1606 […]