0

我想从 rake 任务中删除位于 mongoid.yml 中的所有数据库会话。我正在使用 rails4 和 mongoid4。这是我的 mongoid.yml:

development:
  sessions:
    default:
      database: cp1_dev
      hosts:
        - localhost:27017
    affiliate:
      database: cp2_dev
      hosts:
        -  localhost:27017
    shortener:
      database: cp3_dev
      hosts:
        -  localhost:27017

test:
  sessions:
    default:
      database: lion_test
      hosts:
        - localhost:27017
      options:
        read: primary
        max_retries: 1
        retry_interval: 0
    affiliate:
      database: cp_test
      hosts:
        -  localhost:27017
    shortener:
      database: cp1_test
      hosts:
        -  localhost:27017

当我执行rake db:drop或 rakedb:mongoid:drop命令时,它们只会删除默认数据库。所以我搜索了它并找到了一个在 rails 控制台上完美运行的解决方案。

执行后,rails console我只需将以下代码放在控制台上并按回车键。

::Mongoid::Threaded.sessions.values.each do |session|
    p session.drop 
end 

正如我所说,这就像在 Rails 控制台上的魅力一样。但是当我将此代码注入任何 rake 任务时,它不起作用。

namespace :human do
  desc 'Resets databases'
  task :reset => :environment do
  ::Mongoid::Threaded.sessions.values.each do |session| 
       p session.drop 
  end
end

让该代码适用于任何 rake 任务的正确方法是什么?

4

1 回答 1

0

使用以下解决方法,我可以删除所有 mongoid 会话。

mongoid = YAML.load_file('config/mongoid.yml')
mongoid[Rails.env]["sessions"].each do |session|
  ::Mongoid::Sessions.with_name(session[0].to_sym).drop
end
于 2014-06-08T20:40:00.990 回答