2014-06-06 48 views
0

我想從rake任務中刪除位於mongoid.yml中的所有數據庫會話。我正在使用rails4和mongoid4。這裏是我的mongoid.yml:如何從rake任務中刪除位於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之後,我只需將下面的代碼放在控制檯上並按下回車鍵即可。

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

正如我所說,這就像一個軌道控制檯上的魅力。但是當我將這段代碼注入任何rake任務時,它不起作用。

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

讓代碼適用於任何rake任務的正確方法是什麼?

+0

定義*不起作用*。 –

+0

我不明白你說什麼。 – zeitnot

+0

*你在rake任務中不能工作*是什麼意思?什麼不行?它怎麼不工作?然後會發生什麼? –

回答

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 
相關問題