Как удалить все базы данных, расположенные в 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