技術

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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

【Rails】Railsでsitemap.xmlを作成する

こんにちは Railsでsaitemap.xmlを作成する方法を紹介します。 s …

no image

RxJSを覚える時に参考にしたサイトまとめ

こんばんは 弊社ではAngularを使用する機会が多いです。 Angularを使 …

no image

javascriptで画面サイズ毎に処理をしたい時

こんにちは 今回はjavascriptで画面サイズ毎に処理をしたい時にオススメの …

JavaScriptでクリップボードにテキストをコピーする!

こんにちは。たなかです。 ブラウザに表示されている、自動採番されたIDをクリップ …

[ Rails ]ActiveRecord::RecordInvalidで怒られ、saveができない!

こんにちは。たなかです。 新しいプロジェクトの参画が決まって、今はrailsを書 …