Как удалить все базы данных, расположенные в mongoid.yml, из задачи rake?

Я хочу удалить все сеансы базы данных, которые находятся в mongoid.yml, из задачи rake. Я использую 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 или грабли db:mongoid:drop команды они только удаляют базу данных по умолчанию. Поэтому я искал его и нашел решение, которое отлично работает на консоли рельсов.

После исполнения rails console Я просто положил следующий код на консоль и нажал Enter.

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

Как я уже сказал, это работает как шарм на консоли рельсов. Но когда я вставляю этот код в любую задачу граблей, он не работает.

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

Как правильно позволить этому коду работать для любой грабли?

1 ответ

Решение

С помощью нижеприведенного решения я могу отбросить все сеансы 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
Другие вопросы по тегам