簡體   English   中英

在 Rails 生產應用程序的 cron 作業中,Rake 任務失敗

[英]Rake task is failing in cron job in Rails production app

我正在使用when gem 來設置一個cron 作業,該作業每周備份一次Rails 應用程序的數據庫。 它在開發中運行良好,但在生產中卻失敗了:

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

錯誤是“缺少 secret_key_base”,但我已經在 a.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 任務沒有問題。 我在這里想念什么?

日程安排.rb

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

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

備份.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

我通過將環境變量從 rbenv-vars 切換到 Figaro gem 來解決這個問題。 現在一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM