2016-04-13 4 views
1

コレクションを削除するボタンがいくつかあるので、サーバーを再起動しなくても開発/テスト中にWebサイトを元の状態に簡単に復元できます。Railsアプリケーションからseeds.rbを実行する

コントローラアクション内で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ファイルの内容は、データが存在するかどうかをチェック条件文と方法の広範囲に使用する、私はそれを10億回を実行することができますので、DBには重複データはないだろう私が行ったことの1%を復元するだけでも、私はそれを実行できます(ここではdev/test環境、時間/リソースの圧力はありません)。あなたは、これは良いアイデアではありません、それはセキュリティ上の問題を伴うことが<rake_command>は、コマンドラインからrake後に実行したいの文である場合は、あなたがRake::Task["<rake_command>"].execute

を使用することができることを認識していると仮定すると、

+0

[コントローラのrakeタスクを実行]と同様の質問(http://stackoverflow.com/q/1170148/567863)? –

答えて

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 

なぜ好きではないですか?

+0

私はこの使用をdev/test環境に限定しています。 Amazon SESをサンドボックスモードでも使用しているため、機能する電子メールアドレスが限られているだけで、購読プロセス/フローを再度テストするには、コレクションを消去するのが非常に便利です。 FactoryGirlファクトリは、新しいオブジェクトの作成を高速にテストする必要があるときにも非常に便利になります(私たちは多くの自動テストを持たず、一部の人は手動でテストします) –

+0

あなたの答えをありがとう。最後に、私はコードと必要なものをユーティリティモジュールの特定のメソッドにエクスポートしました。 –

関連する問題