技術

Dockerでwheneverが動かない (bundler: failed to load command: bin/rails (bin/rails))

投稿日:2018年7月9日 更新日:

どうも中田です。
久々の投稿になります。

正確には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に入ってますね。
すると、うまく動きました。

-技術

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

[Rails] バージョン上げるときに気をつけること

どうも中田です。 セキュリティ診断とかで引っかかってrailsのバージョンあげた …

プログラミンを触ってみた

2020年から小学校でのプログラミング教育が必修になる(かも?)ということで、 …

画像生成マシーン「MakeGirlsMoe」の10連結果

女の子の萌え画像を作ってくれる「MakeGirlsMoe」なるものが作られたよう …

no image

HTMLエンティティを探すならHTML Arrowsがオススメ!

こんにちは htmlエンティティっていうのを聞いたことがありますか? アンパサン …

github500

[GitHub] 突然プッシュできなくなったときの確認事項

こんにちは。佐藤です 今回はGitHubに突然プッシュできなくなったときの確認事 …