【问题标题】:Rake task is failing in cron job in Rails production app在 Rails 生产应用程序的 cron 作业中,Rake 任务失败
【发布时间】:2021-05-13 09:49:54
【问题描述】:

我正在使用when gem 来设置一个cron 作业,该作业每周备份一次Rails 应用程序的数据库。它在开发中运行良好,但在生产中却失败了:

rake aborted!
ArgumentError: Missing `secret_key_base` for 'production' environment, set this string with `rails credentials:edit`

错误是“缺少 secret_key_base”,但我已经在 .rbenv-vars 文件中设置了生产环境变量,否则应用程序运行良好。

这是导致上述错误的任何时候生成的 cron 作业(出于测试目的,它设置为每分钟)

PATH=/home/deploy/wiki/doc_app/shared/bundle/ruby/2.6.0/bin:/home/deploy/.rbenv/versions/2.6.5/bin:/home/deploy/.rbenv/libexec:/home/deploy/.rbenv/plugins/ruby-build/bin:/home/deploy/.rbenv/plugins/rbenv-vars/bin:/home/deploy/.rbenv/shims:/home/deploy/.rbenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

* * * * * /bin/bash -l -c 'cd /home/deploy/wiki/doc_app/releases/20210209173234 && RAILS_ENV=production bundle exec rake backup:db --silent >> log/cron_log.log 2>&1'

# End Whenever generated tasks for: /home/deploy/wiki/doc_app/releases/20210209173234/config/schedule.rb at: 2021-02-09 11:41:37 -0600

当我在 shell 中运行生成的命令时,它工作正常,并且运行 rake 任务没有问题。我在这里错过了什么?

schedule.rb

set :output, "log/cron_log.log"
env :PATH, ENV['PATH']

every 1.minute do
  rake "backup:db"
end

backup.rake

namespace :backup do
  desc "backup database"
  task db: :environment do
    settings = Rails.configuration.database_configuration[Rails.env]
    file_name = "dump-#{Time.now.strftime('%Y%m%d%H%M%S')}.sql"
    path = "#{ENV['HOME']}/backups/"
    full_path = path + file_name
    Backup.create!(path: full_path, name: file_name)
    system "if [ ! -d #{path} ]; then mkdir #{path}; fi; mysqldump -u #{settings['username']} -p#{settings['password']} --databases #{settings['database']} --ignore-table=#{settings['database']}.backups > #{full_path}"
  end
end

【问题讨论】:

  • 您是否尝试运行 rails credentials:edit?然后在生产环境下添加密钥:secret_key_base
  • @AhmedAli 看起来这是 rbenv-vars 的问题。我的 rake 任务没有正确拾取环境,所以我使用 figaro 作为环境变量,它似乎正在工作。

标签: ruby-on-rails cron whenever


【解决方案1】:

我通过将环境变量从 rbenv-vars 切换到 Figaro gem 来解决此问题。现在一切正常。

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 2021-10-12
    • 2011-11-17
    • 1970-01-01
    • 2020-05-20
    • 2011-12-03
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多