1

我在 Rails 应用程序中将 gem 用于 cronjobs - 生产。我收到一个错误bundler: not executable: bin/rails

调度程序.rb

every 15.minute do
 runner 'TestJob.perform_later()'
end

crontab

0,15,30,45 * * * * /bin/bash -l -c 'cd /home/deploy/my-app/releases/20190719103116 && bundle exec bin/rails runner -e production '\''TestJob.perform_later()'\'''

但是当我/bin/bash -l -c 'cd /home/deploy/my-app/releases/20190719103116 && bundle exec bin/rails runner -e production '\''TestJob.perform_later()'\'''在我的 bash 中运行时bin/rails,只用rails这个工作就好了。如何解决这个问题?

4

2 回答 2

3

尝试通过 rake 任务运行它:

配置/时间表.rb

every 15.minutes do
  rake 'testing:run_tests'
end

lib/tasks/testing.rake

namespace :testing do
  desc 'Run tests'
  task run_tests: :environment do
    TestJob.perform_later
  end
end
于 2019-07-19T11:15:52.130 回答
3

快速回答

为了仍然使用原始runner作业类型,只需将其添加到您的schedule.rb

set :runner_command, "rails runner"

长答案

文档不是很清楚,但是您可以看到在When 的/lib/whenever/setup.rbrunner中设置了默认作业类型:

job_type :runner, "cd :path && :bundle_command :runner_command -e :environment ':task' :output"

在同一个文件中,您可以看到此:runner_command设置设置为:

set :runner_command, case
  when Whenever.bin_rails?
    "bin/rails runner"
  when Whenever.script_rails?
    "script/rails runner"
  else
    "script/runner"
  end

bin/rails runner因此,默认情况下,除非您用上述答案覆盖它,否则将使用创建您的 cron 命令。

于 2019-11-14T16:54:45.947 回答