技術

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]「どのブラウザからのアクセスか」を判別する方法

こんにちは。たなかです。 前回以下のような記事を書きました。   [R …

[Rails] TinyTds::Error (closed connection)

どうも中田です。 たぶん、この記事で救われるエンジニアの方はおそらく1人いればよ …

no image

ng-ifのelse句でコンポーネントのプロパティと名前重複

こんにちは、コーテッグのこやまです。 Angularを触っていたら、コンポーネン …

no image

【Rails】helperからbrタグを含めた文字列を返したい時

こんにちは プライベートではもっぱらRailsを触っています。 触ってからそんな …

[XCode] clang: error: linker command failed with exit code 1

どうも中田です 本日はシンプルに。 XCodeでbuild時に発生しました。 エ …