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'
。它运行良好:)
我已经使用 "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'
。它运行良好:)