2016-04-13 9 views
1

Koleksiyonları temizlemek için bazı düğmelerim var, böylece sunucuyu yeniden başlatmadan, geliştirme/sınama sırasında web sitesini bozulmamış duruma geri yüklemek kolaydır.Rails uygulamasından tohumlar.rb yürütme

Bir denetleyici eyleminin içinde seeds.rb'nin içeriğini nasıl uygularım?

def purge 
    if Rails.env.production? 
    should_not_happen(severity: :armageddon) 
    else 
    # Well at least restore one admin account ! 
    User.all.each(&:destroy) 
    regenerate_main_admin_accounts # Here I need to replay the content of `seeds.rb` 
    redirect_to(admin_dashboard_path) 
    end 
end 

Not: benim seeds.rb dosyasının içeriği bu yüzden, ben DB hiçbir yinelenen veri olacağını o milyarlarca çalıştırabilir, verinin varlığını kontrol Koşullamalar ve yöntemlerinin kapsamlı kullanan Sadece ne gittiğimin% 1'ini geri yüklemek için bile çalıştırabilirim (burada dev/test ortamları konuşuyoruz, zaman/kaynak basıncı yok). Bunun iyi bir fikir değil farkındayız varsayarsak, ve onu <rake_command> komut satırından rake sonra aday olacağını ifadedir nerede Rake::Task["<rake_command>"].execute

kullanabilirsiniz, güvenlik kaygıları içerebilir

+0

Benzer soru [Denetleyicide komisyon görevi çalıştır] (http://stackoverflow.com/q/1170148/567863)? –

cevap

1

.

require 'rake' 
require 'rake/task' 

# We want to make sure tasks are loaded without running them more than once: 
Rake::Task.clear 
<AppName>::Application.load_tasks 


class SeedsController < ApplicationController 

    def run 
    Rake::Task["db:seed"].execute 

    redirect_to "/" # Or wherever... 
    end 

end 

Merak etme, neden bunu yapmak istiyorsunuz?

+0

Bu kullanım ortamlarını dev/test etmek için kullanıyorum. Ayrıca Sandbox modunda Amazon SES kullanıyoruz, bu yüzden sadece çalışacak sınırlı sayıda e-posta adresimiz var ve abonelik süreçlerimizi/akışımızı tekrar test etmek için koleksiyonları silmek çok kolay. Hızlı bir şekilde yeni nesnelerin oluşturulmasını test etmemiz gerektiğinde FactoryGirl fabrikaları oldukça kullanışlı hale gelir (atm, birçok otomatik testimiz yoktur ve bazı insanlar elle test eder). –

+0

Cevabınız için teşekkürler. Sonunda kodu ve gereksinimi bir yardımcı modülün belirli bir yöntemine aktardım. –