Я написал планировщик, используя «каждый раз, когда драгоценный камень». один из моих планировщиков каждый день запускает задачу rake. Эта задача rake вызывает метод в моей модели и выполняет операции активной записи.
все работает нормально, но активная запись подключается к среде «разработки» в файле database.yml и подключается к базе данных разработки во время производства.
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 активрекорд подключается к базе данных разработки. Как заставить его подключиться к производству.?
ENV['RACK_ENV']='production'
, но это плохая практика. Я не знаком с тем, как настраивается Sidekiq, но где-то будет опция, которая позволит вам сделать это либо через файл конфигурации yaml, либо через переменную среды. 25.08.2015