【问题标题】:Rake task identifying the environment as development ruby and sinatra将环境识别为开发 ruby​​ 和 sinatra 的 Rake 任务
【发布时间】:2015-11-18 21:35:31
【问题描述】:

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

一切正常,但 activerecord 连接到 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

瑞克文件

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 连接到开发数据库。如何使其连接到生产环境。?

【问题讨论】:

    标签: ruby rake-task whenever sinatra-activerecord


    【解决方案1】:

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

    尝试发出以下命令:

    user@server $ RACK_ENV=production rake prune_users:older_than_2months
    

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

    【讨论】:

    • 感谢您的解决方案!!!是的,它起作用了:)。但是我应该在代码中的哪里指定这个“RACK_ENV”??
    • @joe 你总是可以用ENV['RACK_ENV']='production' 在代码中硬编码它,但这是不好的做法。我不熟悉 Sidekiq 的配置方式,但会有一个选项允许您通过配置 yaml 文件或通过环境变量执行此操作。
    • 是的,我在第一行的“reap_users.rake”文件中添加了 ENV['RACK_ENV']='production'。它工作得很好。谢谢:)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 2015-10-29
      • 1970-01-01
      • 2012-04-04
      • 2023-04-07
      • 2011-04-11
      相关资源
      最近更新 更多