Rake 任务将环境识别为开发 ruby 和 sinatra

Rake task identifying the environment as development ruby and sinatra

我已经使用 "whenever gem" 编写了一个调度程序。我的一个调度程序每天运行一个 rake 任务。这个 rake 任务调用我的模型中的一个方法并执行 activerecord 操作。

一切正常,但 activerecord 连接到 database.yml 文件中的 "development" 环境,并在生产中连接到开发数据库。

config/schedule.rb 

set :output, "log/cron_log.log"

every 6.hours do
  rake "sidekiq:restart"
end

every :day, :at => '01:00am' do
  rake 'prune_users:older_than_2months'
end

Rakefile

require 'newrelic_rpm'
require './app.rb'
import './lib/tasks/sidekiq.rake'
import './lib/tasks/reap_user.rake'
import './models/exportuser.rb'

/lib/tasks/reap_user.rake

require 'sinatra/activerecord'
require 'sinatra/activerecord/rake'

namespace :prune_users do

  desc 'Delete 2 months older users with status non-active'
  task :older_than_2months do
    ExportUser.delete_users_b4_2months
  end

end

/models/exportuser.rb

class ExportUser < ActiveRecord::Base
  self.table_name = 'exportusers'

  def self.delete_users_b4_2months
    begin
      @old_users = ExportUser.where("status != ? and Modified < ?", "Active", 2.months.ago)
      puts "Count of users before 2 months with non-active status on #{Time.now}"
      puts @old_users.count
      @old_users.find_each do |users|
        users.destroy!
      end
    rescue => err
      NewRelic::Agent.notice_error(err)
    end
  end

end

一切正常,但在 ExportUser.rb 中,activerecord 连接到开发数据库。如何让它连接到生产环境?

您的应用程序应遵循 RACK_ENV 环境变量。

尝试发出以下命令:

user@server $ RACK_ENV=production rake prune_users:older_than_2months

并验证它是否连接到生产数据库。如果是这样,您需要更改任何调用计划作业的内容以还包括 RACK_ENV 环境变量

require 'sinatra/activerecord' 之前的 rake 任务文件“reap_users.rake”文件的第一行中添加 ENV['RACK_ENV']='production'。它运行良好:)