2016-04-13 3 views
1

У меня есть несколько кнопок для очистки коллекций, поэтому легко восстановить сайт в нетронутом состоянии во время разработки/тестирования, даже не перезагружая сервер.Выполнение seeds.rb из приложения Rails

Как я могу выполнить содержимое seeds.rb внутри действия контроллера?

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 

Примечание: содержимое моего файла seeds.rb широко использовать условными и методов, которые проверяют на наличие данных, я мог бы запустить его в миллиард раз не будет никаких дублированных данных в БД, так Я могу просто запустить его, даже если бы только восстановить 1% от того, что ушло (мы говорим об dev/test environment здесь, без давления времени/ресурса).

+0

Аналогичный вопрос для [Выполнение задачи рейка в контроллере] (http://stackoverflow.com/q/1170148/567863)? –

ответ

1

Предполагая, что вы знаете, что это не очень хорошая идея, и она может включать в себя вопросы безопасности, вы можете использовать Rake::Task["<rake_command>"].execute

Где <rake_command> это заявление вы бы запустить после rake из командной строки.

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 

Из любопытства, почему вы хотите это сделать?

+0

Я ограничиваю это использование для сред dev/test. Мы также используем Amazon SES в режиме Sandbox, поэтому у нас есть только ограниченное количество адресов электронной почты, которые будут работать, и снова протестировать процессы/потоки подписки, которые так просто стереть коллекции. Заводы FactoryGirl также становятся очень удобными, когда нам нужно быстро протестировать создание новых объектов (atm у нас не так много автоматических тестов, и некоторые люди тестируют вручную) –

+0

Спасибо за ваш ответ. В итоге я экспортировал код и требует определенного метода служебного модуля. –

Смежные вопросы